如果我有一个分层的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型的所有父母,祖父母,祖父*?
答案 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为该元素添加正确的。