解决了(有点)
function findByDepth(parent,child,depth){
var children = $();
$(child,$(parent)).each(function(){
if($(this).parentsUntil(parent,child).length == (depth - 1)){
children = $(children).add($(this));
}
});
return children;
}
// this would successfully return the 3.X elements of an HTML snippet structured
// as my XML example,where
然而,有人必须在这里得到接受的答案,我不打算自己回答这个问题,并且与你赚得很好的代表潜逃.所以,如果有人想要添加任何内容,例如提供对优化此功能的深入了解(在我去之前和$.extend()它之前),我可能会将你的答案标记为正确,否则会回到标记谁是我最初的第一个题.
顺便说一句,请在小提琴中检查:http://jsfiddle.net/5PDaA/
分更新
再看看@ CAFxX的答案,我意识到他的方法可能更快,在浏览器中利用querySelectorAll可以.无论如何,我修改了他对下面的方法,但它仍然让我感到愤怒:
$.fn.extend({
'findAtDepth': function(selector,depth){
var depth = parseInt(depth) || 1;
var query = selector;
for(var i = 1; i < depth; i++){
query += (' ' + selector);
}
return $(query,$(this)).not(query + ' ' + selector);
}
});
它第一次工作正常,但随着上下文更改为选择器中找到的元素,它由于某种原因失败.
更新
好吧,我愚蠢地不清楚,并且不知道我正在做什么的规格.自从我查看了我的实现后,我将在这里更新;我会标记满足我最初要求的最早答案,因为人们认为我是一个傻瓜,无偿更新(我不会责怪你),但下面提到的奖金基本上是一个要求.我发布了另一个问题,但它可能会因重复而被关闭.无论如何,1你的耐心:
给定子项的深度规范是必要的(因为它包含在函数中或其他方式)因此隔离了子项并且同样嵌套(不一定是兄弟)匹配元素.
例如(简称XML):