Jquery 获取系列中最后一个元素内表格的最后一行

8

我有一系列基于章节的幻灯片:

<div id="slides">
    <section id="first">
        <section>
            <table>
                <thead>
                </thead>
                <tbody>
                    <tr id="somethingUnique">
                    ...
                    </tr>
                </tbody>
            </table>
        </section>
        <section>
            <table>
                <thead>
                </thead>
                <tbody>
                    <tr id="somethingUnique">
                    ...
                    </tr>
                </tbody>
            </table>
        </section> 
       ...
    </section>
</div>

我需要选择在#第一部分的最后一个表格中的最后一行的ID。
我正在使用以下Jquery,但返回“undefined”...有什么想法吗?
    var lastListItem = $('#first:last-child table>tbody>tr:last').attr("id");
    alert(lastListItem);

我创建了一个 fiddle,似乎返回了 somethingUnique - Mark Meyer
5个回答

23

1
var lastListItem = $("#first").find("section").last().find("tr").last().attr("id");

我更喜欢使用[0].id而不是.attr("id"),因为这样可以少调用一个方法;但是,如果您不能确定DOM位置中是否始终有一个表格,则使用attr更安全。


你可以使用伪选择器来查找项目,但我选择使用链接方法来提高性能。 - Joe Johnson
你有测量过这个解决方案在支持 querySelectorAll() 的浏览器上实际上更快吗? - Frédéric Hamidi
@FrédéricHamidi 不,根据浏览器的不同,querySelectorAll 可能会更快。但是,它仍然是一种需要解析长字符串以确定在 DOM 中查找哪种元素的方法。当选择器较短而不是较长时,我更喜欢使用 querySelectorAll(或 jQuery 中的伪选择器)。 - Joe Johnson
我看不出单独调用 find()last() 会使它更快,解析选择器不是瓶颈。你需要展示一些事实来支持你的说法。 - Ruan Mendes

0
var lastListItem = $('#first section:last  table tr:last').attr("id");

0

.find():

获取当前匹配元素集合中每个元素的后代,可以通过选择器、jQuery对象或元素进行过滤。

$("#first")​.find("tr:last").attr("id")

或者更简单地说,在这种情况下:

$("#first tr:last").attr("id")

例子


0
其他答案是可行的,但你尝试的问题在于应该将:last-child应用于子元素(section),而不是父元素(#first)。以下代码应该可以解决问题。
$('#first section:last-child table>tbody>tr:last').attr("id");

并且可以简化为

$('#first section:last-child tr:last-child').attr("id");

http://jsfiddle.net/e7mUD/1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接