我在使用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/
答案 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()
答案 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 强>