给定一个无序的嵌套列表,如果找到第一次出现的“li”,如何找到同一级别的所有兄弟姐妹?
root.find('li:first')...?
更新:我的问题没有正确制定。我其实需要了解以下内容。如果我有对元素的引用,我如何找到元素兄弟并创建一个包含元素本身和相同元素类型的兄弟的集合,在本例中为'li'?
答案 0 :(得分:9)
如果您想要包含原始元素,则需要
$(this).siblings("li").andSelf();
编辑:jQuery已经弃用了andSelf。这仍然是最佳答案,因此将来使用addBack可能就是你想要的
$(this).siblings("li").addBack();
答案 1 :(得分:4)
如果您正在处理列表,则只需要查看兄弟姐妹。列表本身只有li
元素,没有别的,所以以下就足够了:
$(this).siblings().andSelf();
如果您不确定nodeName,可以从第一个元素中解除:
var elem = $("#container :first-child");
elem.siblings( elem.prop("nodeName") ).andSelf();
如果你发现自己需要反复执行这个逻辑,那么通过扩展jQuery.fn为自己提供一个方法可能是明智的:
jQuery.extend( jQuery.fn, {
typeSiblings: function(){
return this.siblings( this.prop("nodeName") );
}
});
允许您像任何其他过滤方法一样调用新方法:
$("#container :first-child").typeSiblings().andSelf();
所以在这种情况下,无论第一个孩子的类型是什么,我们将检索的是兄弟姐妹的类型。如果是段落,我们将获得所有段落。如果是图像,我们将获得所有图像。但请注意,这仅基于标记名,而不是基于类(尽管这很容易实现)。