繁体   English   中英

如何在chckebox循环中遍历一组对象并替换一个对象:检查每个函数-jQuery

[英]How to iterate through an array of objects and replace one object while in the loop of chckebox : checked each function - jquery

在jquery中单击一个按钮,我循环遍历所有已选中/选中其复选框的行,同时,我必须创建一个选定或修改对象的数组。

不能将数组重置为,如果一个Company第一次出现而第二次没有出现,因为未检查该行,我必须保留以前的值

看看这个小提琴

https://jsfiddle.net/shaswatatripathy/y7jqb5hp/1/

因此,假设您首先选择了两行,然后在文本框中添加了一些文本,则对象数组将具有两个具有该属性的对象,但是第二次他从那两行中选择了一行,然后取消选择另一行并给出了其他值文本框,我们必须使用具有该值的公司名称更新对象

的HTML

 <table>
      <tr>
      <th>checkbox</th>
        <th>Company</th>
        <th>Contact</th>
        <th>Country</th>
      </tr>
      <tr>
      <td><input name="eachRow" type="checkbox"/> </td>
        <td>Alfreds </td>
        <td>Maria </td>
        <td>Germany</td>
      </tr>
      <tr>
       <td><input name="eachRow" type="checkbox"/> </td>
        <td>Centro </td>
        <td>Francisco </td>
        <td>Mexico</td>
      </tr>
      <tr>
       <td><input name="eachRow" type="checkbox"/> </td>
        <td>Ernst </td>
        <td>Roland </td>
        <td>Austria</td>
      </tr>
      <tr>
       <td><input name="eachRow" type="checkbox"/> </td>
        <td>Island </td>
        <td>Helen </td>
        <td>UK</td>
      </tr>
      <tr>
       <td><input name="eachRow" type="checkbox"/> </td>
        <td>Laughing  </td>
        <td>Yoshi </td>
        <td>Canada</td>
      </tr>
      <tr>
       <td><input name="eachRow" type="checkbox"/> </td>
        <td>Magazzini </td>
        <td>Giovanni </td>
        <td>Italy</td>
      </tr>
    </table>

    <input type="button" onclick="getdetails()" value="click me"/><br>
     <input type="text" id="txtBox" name="name"><br>

jQuery的

var selectedRows=[];

function getdetails() {
var modifier = $('#txtBox').val();
        $.each($("input[name='eachRow']:checked").parents("tr"), function () {


        selectedRows.push ({
          company : $(this).find('td:eq(1)').text(),
          contact: modifier


        })

        console.log(selectedRows);

        });


        }

的CSS

table {
    font-family: arial, sans-serif;
    border-collapse: collapse;
    width: 100%;
}

td, th {
    border: 1px solid #dddddd;
    text-align: left;
    padding: 8px;
}

tr:nth-child(even) {
    background-color: #dddddd;
}

下面的代码可以解决问题。

var selectedRowsArray= [];


$.each($("input[name='eachCheckbox']:checked").parents("tr"), function () {


ID= $(this).find('td:eq(1)').text(); 
var found = selectedRowsArray.filter(function (el) {
    return el.ID === ID;
});
if (found.length === 0) {
    selectedRowsArray.push({                   
        ID: ID,
        Col2value : $(this).find('td:eq(2)').text(),
        Col3value : //somevalue manupulated,
        Col4value : //somevalue manupulated
    });
} else {
    // Do the updating here with the object `found`
}

});

链接到解决方案https://jsfiddle.net/y7jqb5hp/3/

您可以使用filter函数来获取ID为selectedRowsArray的数组中的对象

尝试这个

var objs = selectedRowsArray.filter(function(row){return row.ID == ID;});

返回的objs是在您的数组中ID为ID的对象数组。

现在,您可以通过迭代objs和upadate对象的属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM