在jQuery中,如何选择当前表TR而不是任何嵌套表TR?

时间:2013-05-21 18:34:38

标签: javascript jquery jquery-selectors

所以我尝试了这个:

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
                            ....

5 个答案:

答案 0 :(得分:0)

您可以使用.not()

过滤tr下的tr
input.find("tr").not("tr tr")

答案 1 :(得分:0)

您可以过滤它:

input.find("tr").filter(function(){return !$(this).closest('tr').length}).each(...);

答案 2 :(得分:0)

如何在t列表中调用first()?

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

答案 3 :(得分:0)

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

来自文档:

  

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

可选的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');

非常丑陋,但你不能单独使用选择器。

答案 4 :(得分:0)

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

$('table').find('tr:first').parent().children()