为什么jQuery的remove()方法接受选择器?

时间:2014-06-27 08:16:45

标签: jquery

我在使用jQuery的remove时发现了一件奇怪的事情。虽然jQuery清楚地表明:

  

选择
  类型:字符串
  一个选择器表达式,用于过滤要删除的匹配元素集。

如果您尝试此代码:

$element.remove('.k-grouping-header,.k-group-cell,.k-group-col,.k-grouping-row');

它不会按预期工作,你必须使用

$element.find('.k-grouping-header,.k-group-cell,.k-group-col,.k-grouping-row').remove();

你们有没有注意到这一点,或者只是我做错了什么? JSFiddle:http://jsfiddle.net/YzfRT/

3 个答案:

答案 0 :(得分:4)

remove()将获取从DOM中选择的所有元素,无论您是否传递参数。

将参数(选择)传递给remove()将过滤这些元素以匹配该选择。

大概在第一个例子中,你选择了你的父母。 remove()会尝试删除此元素,但由于它(可能)与.k-grouping-header,.k-group-cell,.k-group-col,.k-grouping-row不匹配,因此它将保持原样。

您的困惑可能来自于不了解过滤发现

之间的区别

你的第二次尝试是正确的。

为什么要选择一个选择器?
主要用于链接。考虑你选择了很多元素来调用jQuery方法,也许你想改变颜色:

$('div').css({color:"#F00"})

但是你只想删除课程.remove的那些?您仍然可以链接并过滤要删除的内容:

$('div').css({color:"#F00"}).remove('.remove')

顺便说一下,它与:

完全相同
$('div').css({color:"#F00"}).filter('.remove').remove()

JSFiddle

答案 1 :(得分:0)

你看,有书面过滤。这意味着您应该选择例如

<div class="orion"></div>
<div class="orion"></div>
<div class="omega"></div>

所以你应该写

$('div').remove('.orion');

因为它过滤了每个所选元素的类,但它不像$(&#39; body&#39;)那样工作。删除(&#39; orion&#39;),某事比如$(&#39; body&#39;)。find(&#39; .orion&#39;)。remove();

这就是全部。

答案 2 :(得分:0)

.remove()函数中的参数用作选择器的过滤器,

所以,

$('div').remove('.abc')

将删除<div>abc,而不删除类abc的子项。


在您的情况下,请使用

$('p',$element).remove('.k-grouping-header,.k-group-cell,.k-group-col,.k-grouping-row');

<强> Demo