如何获取具有特定子项的项目列表?

时间:2011-08-23 15:01:57

标签: jquery jquery-selectors html-table

我有一个表格,其中每一行以“复选框”开头,我想获得包含复选框的所有TR,并检查它。

这样的事情:

$('#' + tableId + ' > tbody > tr:contains(td > input[type=checkbox]:checked').each(function (i, item) {

        alert('delete ' + $(item).data('row-id'));

    });

该代码不起作用,它会卡住。可能是因为“包含”选择器仅用于文本。我怎么能这样做?

问候。

3 个答案:

答案 0 :(得分:2)

使用jQuery的has

$('#' + tableId + ' > tbody > tr:has(td > input[type=checkbox]:checked)').each(function (i, item) {

  alert('delete ' + $(item).data('row-id'));

});

为了获得更好的性能(请参阅jQuery API文档),请使用:

$('#' + tableId + ' > tbody > tr')
.filter(':has(td > input:checkbox:checked)').each(function (i, item) {

  alert('delete ' + $(item).data('row-id'));

});

由于has查询无法通过querySelectorAll()运行,因此无需使用[type=checkbox]

答案 1 :(得分:0)

您不需要:contains选择器。

如果您希望它位于<tr>内的任何位置(甚至是嵌套元素内部)

$('#' + tableId + ' > tbody > tr td > input[type=checkbox]:checked').each(function (i, item) {

如果你想直接把它放在里面

$('#' + tableId + ' > tbody > tr > td > input[type=checkbox]:checked').each(function (i, item) {

答案 2 :(得分:0)

您可以抓住复选框,然后找到最近的tr

$('#' + tableId + ' > tbody > tr > td > input[type=checkbox]:checked').closest("tr")

注意,您还缺少)来关闭contains