我对删除方法感到有点困惑。
var articleItems;
articleItems = $('.article-item');
var firstArticleItem = articleItems.first();
firstArticleItem.find('ul').remove();
上面的代码正在运行,而这个代码不是
var articleItems;
articleItems = $('.article-item');
var firstArticleItem = articleItems.first();
firstArticleItem.remove('ul');
我想如果你添加一个选择器,那么它将从DOM中删除。 你能解释为什么第二种解决方案不起作用吗?
谢谢
答案 0 :(得分:1)
第二个过滤匹配元素的集合。在这种情况下,firstArticleItem
中的所有元素都不匹配ul
选择器,因此没有任何反应。
// Remove 'ul' child elements of firstArticleItem
firstArticleItem.find('ul').remove();
// Remove elements from firstArticleItem that also match 'ul'
firstArticleItem.remove('ul');
答案 1 :(得分:1)
因为$el.remove(selector)
相当于$el.filter(selector).remove()
,而不是$el.find(selector).remove()
。换句话说,作为参数传递的选择器允许您有选择地从原始集合中删除元素 - 而不是它们的后代。引用docs:
.remove([selector])
<强>选择强>
一个选择器表达式,用于过滤要删除的匹配元素集。
答案 2 :(得分:1)
一个选择器表达式,用于过滤要删除的匹配元素集。
传递给remove的参数只是一个过滤器。在删除之前,它将检查调用方法的jQuery对象是否与选择器匹配。要删除与该选择器匹配的所有后代,请改用.find('ul').remove()
。
答案 3 :(得分:1)
$elems.remove()
删除集$elems
中的所有元素。您可以通过添加选择器来过滤$elems
集,以便只删除其中的一些,如下所示:$elems.remove('.class')
。这将删除集合中也包含“class”类的所有元素。
据推测,您要做的是删除集$elems
的子,这不是它的工作原理。但是,如果firstArticleItem
实际上是<ul>
元素,则可以使用,如下所示。
var articleItems;
articleItems = $('.article-item');
var firstArticleItem = articleItems.first();
firstArticleItem.remove('ul');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="article-item">
<li>first item</li>
</ul>
<ul class="article-item">
<li>second item</li>
</ul>
答案 4 :(得分:1)
remove方法不会从当前对象包装器中过滤ul项。
你需要一个filter()或find()才能做到这一点。