jQuery选择ul中的所有后代li?

时间:2013-08-17 00:29:46

标签: javascript jquery jquery-selectors

如果我有一个分层的UL / LI列表,是否可以使用JQuery从根UL获取所有后代LI?

目前我在UL.children('li')内进行递归。每个(...)

(function foo($ul) {
    $ul.children("li").each(function () {
        var $li = $(this);
        tabMap[$li.find('a').attr('href')] = $li;
        $li.children("ul").each(function () {
            foo($(this));
        });
    });
})($ul);

哪种方法运行正常,但如果有可能一次性完成这样做,我会很高兴。

此外,是否可以为父母做同样的事情? 例如从另一个LI找到LI型的所有父母,祖父母,祖父*?

2 个答案:

答案 0 :(得分:5)

您可以使用.find()获取所有后代UL元素:

$ul.find("li")

您可以使用.parents()获取所有祖先:

$li.parents("li");

您可以找到所有jQuery树遍历方法here

答案 1 :(得分:1)

要收集所有href的锚链接,这些锚链接是某些根列表中列表项的直接子项,从根开始,找到所有这些链接,然后将它们放在地图中并将它们与父项关联。

var tabMap = {};
$("ul#root").find("li > a").each(function() {
    var link = $(this).attr("href");
    var $li = $(this).parent("li");
    tabMap[link] = $li;
});

请注意,调用parent时的filter参数不是必需的,但它有助于明确您希望在那里找到的内容。此外,ul#root过于具体,因为ID是唯一的;我在这里只添加了ul,以显示这是您的顶级列表,您应该根据HTML为该元素添加正确的。