0

所以我尝试了这个:

input.find(" tr").each(function(){ ... });

我也试过这个:

input.find(" > tr").each(function(){ ... });

这两个都不起作用。第一个将选择任何 TR,即使它位于嵌套表下。如果表有 tbody 或类似的东西,第二个将不起作用。有什么帮助吗?

输入定义为:

var input = $(".mySelectionScope");

DOM 看起来像这样:

    <div class='mySelectionScope'>
        <div> // Optional
            <table>
                <tbody>
                    <tr>  // Select this one
                        <table>
                            <tr>  // Don't select this one
                            ....
4

5 回答 5

0

您可以使用.not()过滤掉 tr 下的 tr

input.find("tr").not("tr tr")
于 2013-05-21T18:40:45.897 回答
0

你可以过滤它:

input.find("tr").filter(function(){return !$(this).closest('tr').length}).each(...);
于 2013-05-21T18:43:18.830 回答
0

在 trs 列表上调用 first() 怎么样?

http://api.jquery.com/first/

于 2013-05-21T18:43:31.450 回答
0

使用 jQuery children() 而不是 find()

从文档:

.children() 方法与 .find() 的不同之处在于 .children() 仅沿 DOM 树向下移动一个级别,而 .find() 也可以向下遍历多个级别以选择后代元素(孙子等)。

可选的 div 也会产生一些棘手的问题......

var input = $('.mySelectionScope').children('div').length == 0 ?
        $('.mySelectionScope') : 
        $('.mySelectionScope > div'),
    rows = input.children('table').children('tbody').length == 0 ?
        input.children('table').children('tr') :
        input.children('table').children('tbody').children('tr');

如果在所有浏览器中始终插入 tbody,则不需要第二个 if 语句,您可以改为使用

    rows = input.children('table').children('tbody').children('tr');

非常丑陋,但你不能单独使用选择器来做到这一点。

于 2013-05-21T20:00:45.523 回答
0

使用此解决方案,两者之间是否有 tbody 标签无关紧要:

$('table').find('tr:first').parent().children()
于 2013-07-01T22:52:07.237 回答