使用jQuery查找所有“X代”后代

前端之家收集整理的这篇文章主要介绍了使用jQuery查找所有“X代”后代前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

解决了(有点)

好吧,我想我使用以下方法解决了它(禁止边缘情况):

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):

猜你在找的jQuery相关文章