混淆了jQuery .remove()方法

时间:2017-06-01 15:31:35

标签: jquery

我对删除方法感到有点困惑。

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中删除。 你能解释为什么第二种解决方案不起作用吗?

谢谢

5 个答案:

答案 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)

  

一个选择器表达式,用于过滤要删除的匹配元素集。

http://api.jquery.com/remove/

传递给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()才能做到这一点。