2

私が学ぼうとしているのは、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>
4

3 に答える 3

9

配列内のすべてのセレクターを除外するtemp必要がある場合は、次のことができます。

$('li').not(temp.join(',')).css('background', 'red');

たとえばtemp = ['.item-ii', '.item-i']、上記は次と同等になります。

$('li').not('.item-ii,.item-i').css('background', 'red');
于 2013-05-21T15:00:34.950 に答える
0

配列全体ではなく、配列要素を指定する必要があるためです。

$('li').not(temp[0]).css('background', 'red');

jsFiddle の例

アップデート:

複数の要素でこれを行うには、試してください (配列内のクラス名の前のピリオドを削除することに注意してください)。

 var temp = new Array();
 temp[0] = 'item-ii';
 $('li').not(function () {
     return ($.inArray($(this).attr('class'), temp) > -1);
 }).css('background', 'red');

jsFiddle の例

于 2013-05-21T15:00:15.663 に答える
0

「 .item-ii が選択から除外されない理由を知っていますか?」という質問に答えるには、

セレクターとして配列を指定すると、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;
    });

したがって、他の回答のいずれかを使用して、必要な効果を得る必要があります:)

于 2013-05-21T15:19:36.770 に答える