首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >类似于jQuery .closest(),但遍历后代?

类似于jQuery .closest(),但遍历后代?
EN

Stack Overflow用户
提问于 2012-01-22 22:28:36
回答 15查看 93.3K关注 0票数 134

是否有类似于jQuery .closest()的函数,但用于遍历子节点并仅返回最近的子节点?

我知道有.find()函数,但它返回所有可能的匹配,而不是最接近的匹配。

编辑:

这里是最接近的定义(至少对我来说)

首先遍历所有的孩子,然后遍历每个单独的孩子。

在下面给出的示例中,id='2'id="find-my-closest-descendant"最接近的.closest后代

代码语言:javascript
复制
<div id="find-my-closest-descendant">
    <div>
        <div class="closest" Id='1'></div>
    </div>
    <div class="closest" Id='2'></div>
</div>

请参阅JSfiddle link

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2012-01-22 23:06:49

根据您对closest的定义,我编写了以下插件:

代码语言:javascript
复制
(function($) {
    $.fn.closest_descendent = function(filter) {
        var $found = $(),
            $currentSet = this; // Current place
        while ($currentSet.length) {
            $found = $currentSet.filter(filter);
            if ($found.length) break;  // At least one match: break loop
            // Get all children of the current set
            $currentSet = $currentSet.children();
        }
        return $found.first(); // Return first match of the collection
    }    
})(jQuery);
票数 44
EN

Stack Overflow用户

发布于 2012-01-22 22:31:53

如果你说的“最接近”的后代是指第一个孩子,那么你可以这样做:

代码语言:javascript
复制
$('#foo').find(':first');

或者:

代码语言:javascript
复制
$('#foo').children().first();

或者,要查找特定元素的第一个匹配项,您可以执行以下操作:

代码语言:javascript
复制
$('#foo').find('.whatever').first();

或者:

代码语言:javascript
复制
$('#foo').find('.whatever:first');

实际上,我们需要一个可靠的定义来定义“最接近的后代”是什么意思。

例如。

代码语言:javascript
复制
<div id="foo">
    <p>
        <span></span>
    </p>
    <span></span>
</div>

$('#foo').closestDescendent('span')会返回哪个<span>

票数 131
EN

Stack Overflow用户

发布于 2012-01-22 22:31:32

您可以将find:first选择器一起使用:

代码语言:javascript
复制
$('#parent').find('p:first');

上面的代码行将在#parent的后代中找到第一个<p>元素。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8961770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档