2010-09-20 29 views
2

我有一个表,设置出像:jQuery的数据表更新单元

<table id="myTable"> 
    <thead> 
    <tr> 
     <td><input type="checkbox" id="selectall" /></td> 
     <td>Column 1</td> 
     <td>Column 2</td> 
     <td>Column 3</td> 
     <td>Column 4</td> 
     <td>Column 5</td> 
    </tr> 
    </thead> 
    <tbody> 
    </tbody> 
</table> 

然后,JavaScript的:

var myTable = jQuery('#myTable').dataTable({ 
    /* options */ 
}); 

// Ajax request to populate: 
jQuery.get('script.php', function(data){ 
    eval("rows="+data); 
    for(var i=0;i<rows.length;i++){ 
     myTable.fnAddData([ 
      "<input type=\"checkbox\" id=\""+rows[i].uniqueID+"\" />", 
      rows[i].col1Txt, 
      rows[i].col2Txt, 
      rows[i].col3Txt, 
      rows[i].col4Txt, 
      rows[i].col5Txt ]); 
    } 
}); 

现在,我有在此基础上更新表麻烦复选框是选择:

我想更新检查每一行中的第5个单元格。我正在使用fnUpdatefnGetPositionhttp://www.datatables.net/api)的组合。

fnGetPosition预计tdtr元素,所以我想我只是抓住了家长的复选框的td

var checkBoxes = jQuery('td > input:checked', myTable); 
for(var i=0;i<checkBoxes.length;i++){ 
    var parentTD = jQuery('#'+checkBoxes[i].id).parent(); //seems wrong? 
    var pos = myTable.fnGetPosition(parentTD); 
    //alert(pos[0]); 
    myTable.fnUpdate('Updated text', pos[0], 5); 
} 

但是我必须做parentTD因为pos错误似乎永远不会保存一个值。

任何想法?

回答

7

你可以使用each函数遍历一个jQuery对象,它比使用for循环更容易。

此外,我认为你可以optomise你的选择器让你的td元素,而不是geting的检查输入。

这将是一个更高性能,因为它应该删除每个操作中的2个选择器。 我还没有尝试过,但这样的事情应该工作

var checkBoxes = jQuery('td:has(input:checked):not(#selectall)', myTable); 
checkboxes.each(function(){ 
    var pos = myTable.fnGetPosition($(this)); // Im not familiar with the plugin so the extra $() might be overkill 
    alert(pos) // maybe run this alert again, check if you get back an object/value? use firebug to debug and see its value? 
    myTable.fnUpdate('Updated text', pos[0], 5); 
}); 
+0

不错,一个工作。我知道每个(),我都无法收集我有限的jQuery知识来获取所有这些tds。非常感谢。 – tombh 2010-09-20 15:03:53

+0

@tombh:没问题,很高兴我能帮上忙。 – DannyLane 2010-09-20 15:39:20

+0

这是如何与新的API? – 2016-10-24 17:57:36