使用jQuery';s.not()
我想学习的是如何在jQuery中使用带.not()的数组。我的代码如下。你知道为什么吗?第二项没有被排除在选择之外?提前谢谢使用jQuery';s.not(),jquery,arrays,Jquery,Arrays,我想学习的是如何在jQuery中使用带.not()的数组。我的代码如下。你知道为什么吗?第二项没有被排除在选择之外?提前谢谢 <ul class="level-1"> <li class="item-i">I</li> <li class="item-ii">II <ul class="level-2"> <li class="item-a">A</li> <li c
<ul class="level-1">
<li class="item-i">I</li>
<li class="item-ii">II
<ul class="level-2">
<li class="item-a">A</li>
<li class="item-b">B
<ul class="level-3">
<li class="item-1">1</li>
<li class="item-2">2</li>
<li class="item-3">3</li>
</ul>
</li>
<li class="item-c">C</li>
</ul>
</li>
<li class="item-iii">III</li>
</ul>
<script>
var temp = new Array();
temp[0] = '.item-ii';
console.log(temp);
$('li').not(temp).css('background', 'red');
</script>
- i
- ii
- a
- b
- 1
- 2
- 3
- c
- iii
var temp=新数组();
温度[0]=“第二项”;
控制台日志(temp);
$('li').not(temp.css('background','red');
因为您需要指定数组元素,而不是整个数组
$('li').not(temp[0]).css('background', 'red');
更新:
要对多个元素执行此操作,请尝试(请注意,数组中删除了类名前的句点):
如果需要排除temp
数组中的所有选择器,可以执行以下操作:
$('li').not(temp.join(',')).css('background', 'red');
例如,如果temp=['.item ii','.item-i']
,则上述内容相当于:
$('li').not('.item-ii,.item-i').css('background', 'red');
回答您的问题“您知道为什么,第二项没有被排除在选择之外吗?”
当您提供数组作为选择器时,jQuery使用$.grep()
…将DOM节点与字符串进行比较-当然,字符串必须失败:)
因此,您必须添加应该排除的DOM元素,而不仅仅是它们的选择器
var temp = $(".item-ii").map(function() {
return this;
});
因此,您最好使用另一个答案来获得您想要的效果:)
('li').not(temp[0]).css('background','red')代码>@pXL+1添加到您的评论中。我必须补充一点,在使用数组定义要排除的项之前,您必须知道如何获取数组项。如果数组中有4个元素呢?在不单独指定每个元素的情况下,如何排除整个数组?
not: function( selector ) {
return this.pushStack( winnow(this, selector, false), "not", selector);
},
function winnow( elements, qualifier, keep ) {
// Can't pass null or undefined to indexOf in Firefox 4
// Set to 0 to skip string check
qualifier = qualifier || 0;
if ( jQuery.isFunction( qualifier ) ) {
return jQuery.grep(elements, function( elem, i ) {
var retVal = !!qualifier.call( elem, i, elem );
return retVal === keep;
});
} else if ( qualifier.nodeType ) {
return jQuery.grep(elements, function( elem ) {
return ( elem === qualifier ) === keep;
});
} else if ( typeof qualifier === "string" ) {
var filtered = jQuery.grep(elements, function( elem ) {
return elem.nodeType === 1;
});
if ( isSimple.test( qualifier ) ) {
return jQuery.filter(qualifier, filtered, !keep);
} else {
qualifier = jQuery.filter( qualifier, filtered );
}
}
return jQuery.grep(elements, function( elem ) {
return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
});
}
var temp = $(".item-ii").map(function() {
return this;
});