将jQuery选择器应用于容器及其子体

将jQuery选择器应用于容器及其子体,jquery,Jquery,使用jQuery,我可以轻松找到/选择容器中与给定选择器匹配的所有元素: $('.some_class', container); 但是如果我想包含容器本身,如果它与选择器匹配,该怎么办 我认为下面的方法可以奏效 $('.some_class', container).add($(container).filter('.some_class')); 但是有更简单的方法吗?理想情况下,我不必重复选择器 预期行为 使用addBack()(jQuery>=3.0)或addSelf()(jQuery

使用jQuery,我可以轻松找到/选择容器中与给定选择器匹配的所有元素:

$('.some_class', container);
但是如果我想包含容器本身,如果它与选择器匹配,该怎么办

我认为下面的方法可以奏效

$('.some_class', container).add($(container).filter('.some_class'));
但是有更简单的方法吗?理想情况下,我不必重复选择器

预期行为 使用
addBack()(jQuery>=3.0)
addSelf()(jQuery<3.0)

函数findInContainer和dDescents(选择器、上下文){
返回context.find(选择器).addBack(选择器);
}
见:


添加查看此提琴:

尝试了
容器。查找('.some_class')。addBack()
?有趣。我认为我们仍然需要应用过滤器。所以
container.find('.some_class')。addBack('.some_class')
。不,
addBack
知道第一个元素。顺便说一句,如果您有
jQuery
,请使用
addSelf()
。请参阅:目标是仅在第一个元素与选择器匹配时重新添加它们。这就是为什么我在上面的代码段中有.filter()。这将无条件地添加容器。我只想添加匹配的容器。你所说的无条件地
是什么意思?它通过选择器添加链的第一个匹配元素。但如果它与选择器“.some_class”不匹配,它也会添加容器。“some_class”
some_class
不是容器子级的类吗?因此,您的容器也有class
某些类
?容器可能有也可能没有此类。它是作为函数参数出现的,所以在函数运行时我们对它知之甚少。根据其是否具有类,应将其添加到选择中。
<div class="container common">
  <div class="child common"></div>
</div>
function findInContainerAndDescendants(selector, $container) {
  return $(selector, context).add($(context).filter(selector));
}

var $container = $('.container');
findInContainerAndDescendants('.common', $container)  -> both container and child.
findInContainerAndDescendants('.child', $container)  -> just the child.