2010-01-14 89 views
4

给定一个unorder嵌套列表,如果发现“li”的第一个匹配项,那么如何找到处于同一级别的所有兄弟?jQuery:找到相同元素类型的兄弟姐妹

root.find('li:first')...? 

更新:我的问题没有正确制定。我其实需要知道以下内容。如果我有对元素的引用,那么如何找到元素兄弟并创建一个包含元素本身和同一元素类型的兄弟(在本例中为“li”)的集合?

回答

9

如果你想包括原始的元素,以及,你需要

$(this).siblings("li").andSelf(); 

编辑:的jQuery已经过时andSelf。这仍然是顶级的答案,因此以备将来使用加回可能是你想要什么

$(this).siblings("li").addBack(); 
+0

+1 - 现货的答案 – 2010-01-15 16:28:55

+0

注意.andSelf()有利于.addBack的被弃用([选择])HTTP ://api.jquery.com/addBack/ – Andrew 2013-02-05 16:48:03

4

如果你正在处理一个列表,你只需要看看兄弟姐妹。与该列表本身只具有li元素,而不是其他,所以下面就足够了:

$(this).siblings().andSelf(); 

如果你不知道该节点名称的,可以提起,从第一个元素:

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")); 
    } 
}); 
其中每

MITS你调用新的方法,像任何其他滤波方法:

$("#container :first-child").typeSiblings().andSelf(); 

因此,在这种情况下,任何类型的第一个孩子是,那是姐弟的类型,我们将找回的。如果是段落,我们会得到所有段落。如果它是一张图片,我们将获得所有图片。但请注意,这是基于标记名,而不是类(尽管这将很容易完成)。