5

:oddセレクターを関数に渡すと機能しないのはなぜremove(selector)ですか? ドキュメントによると、すでに選択されているアイテムのセットをフィルタリングする必要があります。この場合はliです。

<ul id='list1'>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
    <li>Four</li>
</ul>
<ul id='list2'>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
    <li>Four</li>
</ul>

$(document).ready(function() {
    $('#list1').children(':odd').remove(); // works as expected
    $('#list2').children().remove(':odd'); // does not work
});

結果

-One
-Three

-One
-Two
-Three
-Four
4

2 に答える 2

2

に渡されたセレクターはremove、その場で照合されていました。つまり、セレクターに対して各要素をテストし、一度に 1 要素ずつ、一致したときにそれを削除していました。(ソースコード)

この動作はjQuery 2.0で変更され、削除を行う前にセレクタ フィルタが適用されるようになりました。見る:

#13721: remove(“:nth-child(1)”) は filter(“:nth-child(1)”).remove() とは異なる動作をします


編集:結果の動作説明の修正、@Blenderは正しいです)。この場合、各要素がセレクターに対して個別にチェックされていたため、一致はありません。

したがって、セレクターに対してテストすると、すべての要素が jQuery オブジェクトのインデックス(つまり、/チェック) にあると見なされるため、:oddセレクターは決して一致しません。これは、すべての要素に一致せず、すべての要素に一致する理由を説明しています。0:odd:even:odd:even

于 2013-04-23T02:05:10.260 に答える