如何在javascript中从字符串中删除数据

How to delete data from String in javascript

本文关键字:字符串 删除 数据 javascript      更新时间:2023-09-26

我有一个数据表,其中每行都有复选框。在我的数据表外,有一个打印按钮,用于打印所选行的数据。我将按用户将所有选定的行ID数据存储在字符串中。现在,当用户取消选中复选框时,我想从该字符串对象中删除行Id数据。每当用户取消选中复选框时,它就不会从我之前保存的字符串中删除数据。要在这里指定,我只能向控制器发送字符串对象。我不知道如何做到这一点。

下面是我的代码。

 For print,here is the function
$("img#print").live("click",function(){
var checkboxes = document.getElementsByName('CheckBoxTest');
var mnFlag = false;
var row;
checkedbills = "";  
for (var i=0; i<checkboxes.length; i++)
{
     if (checkboxes[i].checked)
     {
        row = checkboxes[i].id;
        row = row.substring(row.search("_") + 1,row.length);
        sData = $("#openItems").dataTable().fnGetData(row);
        if(sData.SrcTypCode == "Y8")
        {
            mnFlag= true;
            checkedbills = invoiceArray;
                }
     }
}
if(mnFlag)
{
        $('#reBill-dialog').dialog({
            autoOpen: true,
            height: 600,
            width: 650,
            modal: true,
            dialogClass: "foo1",
            closeOnEscape: false,
            draggable: true,
            canMinimize: true,
            beforeClose: cancelReBill()
        });
        }
    else
     {
         if(billData.length < 1)
         {
        alert("Please select at least one bill to be printed");
    }
         else
         {
    $.ajax({
        dataType: "json",
        type: "POST",
        url: 'data_print',
        data: {billData:billData}, 
        success: function(dataList){
            var printDet = dataList.PrintDetails;
            if(printDet == "N"){
                alert(dataList.PrintMessage);
            }
            else{
                alert(dataList.PrintMessage);
            }
        },
        error: function(xhr, ajaxOptions, thrownError) {
         }
    });
}
     }
});

下面是我在选中复选框时将数据存储在字符串中的代码。

                                                                  $('#bills tbody tr   input[name="CheckBoxTest"]').live('change',function(e){
var row=$(this).closest("tr").get(0);
var invsysNumber = $('#bills').dataTable().fnGetData(row).invSysNumber;
var invverNumber = $('#bills').dataTable().fnGetData(row).invVerNumber;
var data = $('#bills').dataTable().fnGetData(row).invSysNumber+','+$('#bills').dataTable().fnGetData(row).invVerNumber;
var index ;
 if(data in checkboxAccIndicator )
    {
    index=1;
    }
else
    {
    index=-1;
    }
if($(this).is(':checked') && (index == -1))
{
    checkboxAccIndicator[$('#bills').dataTable().fnGetData(row).invSysNumber+
                     ","+$('#bills').dataTable().fnGetData(row).invVerNumber]=
    $('#bills').dataTable().fnGetData(row).arLocation;
    if(invoiceArray == ""){
        invoiceArray = "~" + invsysNumber + "," + invverNumber ;
    }else {
        invoiceArray = invoiceArray + "~" + invsysNumber + "," + invverNumber ;
    }

// Otherwise, if checkbox is not checked and row ID is in list of selected row IDs
} 
else if (!($(this).is(':checked')) && (index != -1))
{
   delete checkboxAccIndicator[$('#bills').dataTable().fnGetData(row).invSysNumber+
                         ","+$('#bills').dataTable().fnGetData(row).invVerNumber];
       }
  });

我建议您将复选框ID列表管理为一个数组,然后在将其传递给控制器时将其序列化为字符串。这种方法要简单得多:

// Initialize array
var invoiceArray = [];
// Add item to array
invoiceArray.push(invsysNumber + "," + invverNumber);
// Remove specified item from array
var itemToRemove = invsysNumber + "," + invverNumber;
for (var i=0, il=invoiceArray.length; i<il; i++) {
    if (invoiceArray[i] === itemToRemove) {
        invoiceArray.splice(i, 1);
        break;
    }
}
// Convert array to a string for your controller
var invoiceArrayString = invoiceArray.join('~');

或者,如果您将当前解决方案中的"invoiceArray"实际上是一个字符串(名称不正确),则无论如何都必须将其转换为数组才能删除项。

// Remove item from "invoiceArray" string
var invoiceArraySplit = invoiceArray.split('~');
var itemToRemove = invsysNumber + "," + invverNumber;
for (var i=0, il=invoiceArraySplit.length; i<il; i++) {
    if (invoiceArraySplit[i] === itemToRemove) {
        invoiceArraySplit.splice(i, 1);
        break;
    }
}
// Convert back to string
var invoiceArray = invoiceArraySplit.join('~');