0

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

目前我从 UL.children('li').each(...)

(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 类型的所有父母、祖父母、祖父母*?

4

2 回答 2

5

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

$ul.find("li")

你可以得到所有的祖先.parents()

$li.parents("li");

你可以在这里找到所有的 jQuery 树遍历方法。

于 2013-08-17T00:35:41.393 回答
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不是必需的,但它有助于清楚您期望在那里找到什么。此外ul#root,由于 ID 是唯一的,因此过于具体;我只是在此处添加了 ul 以表明这是您的顶级列表,您应该根据您的 HTML 为该元素添加正确的内容。

于 2013-08-17T00:45:43.217 回答