Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery';s.not()_Jquery_Arrays - Fatal编程技术网

使用jQuery';s.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

我想学习的是如何在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 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;
    });