我正在学习的是如何在jQuery中使用带有.not()的数组。我的代码如下。你知道为什么.item-ii没有被排除在选择之外吗?提前谢谢!
<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>
答案 0 :(得分:8)
如果您需要排除temp
数组中的所有选择器,您可以执行以下操作:
$('li').not(temp.join(',')).css('background', 'red');
例如,如果temp = ['.item-ii', '.item-i']
,则上述内容将等同于:
$('li').not('.item-ii,.item-i').css('background', 'red');
答案 1 :(得分:0)
因为你需要指定数组元素,而不是整个数组。
$('li').not(temp[0]).css('background', 'red');
<强> jsFiddle example 强>
更新:
要使用多个元素执行此操作,请尝试(请注意删除数组中类名称之前的句点):
var temp = new Array();
temp[0] = 'item-ii';
$('li').not(function () {
return ($.inArray($(this).attr('class'), temp) > -1);
}).css('background', 'red');
<强> jsFiddle example 强>
答案 2 :(得分:0)
回答你的问题&#34; 你知道为什么.item-ii没有被排除在选择之外吗?&#34;
当您将数组作为选择器提供时,jQuery使用$.grep()
...
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;
});
}
...将DOM节点与您的字符串进行比较 - 当然必须失败:)
所以你必须添加应排除的DOM元素,而不仅仅是它们的选择器。
var temp = $(".item-ii").map(function() {
return this;
});
所以你应该更好地使用其中一个答案来获得你想要的效果:)