15

この.not()メソッドは、フィルターに使用するセレクターまたはオブジェクトのいずれかを取ります。

この.contents()メソッドは、要素の子ノードとテキスト ノードを含む jQuery オブジェクトを返します

セレクターを引数として使用すると、選択した要素だけでなく、すべてのテキスト ノード.not()も削除されます。

オブジェクトを引数として使用すると、オブジェクトは.not()削除されますが、テキスト ノードは削除されません。

例:

<p>This is a <span id="aSpan">paragraph</span> tag</p>

$("p").contents().not("span");
> []

しかし!

var $sp = $("p span");
$("p").contents().not($sp);
> ["This is a ", " tag"]

また

var sp = document.getElementById("aSpan");
$("p").contents().not(sp);
> ["This is a ", " tag"]

「スパン」セレクター (またはその他のセレクター) によってテキスト ノードが選択されるのに、オブジェクト インスタンスによって選択されないのはなぜですか?

4

1 に答える 1

3

これが発生する理由は、3 年前に行われたこの特定の編集にまでさかのぼることができます。.filter()とメソッドを統合し、.not()実質的に互いに正反対であるため、両方を大幅に簡素化します。

上記の編集の前は、セレクターが文字列以外の場合は内部的.not()に呼び出されていたため、 4 年前に作成されたこのリビジョンから始まるフィルター処理されたコレクション (つまり )で動作していました。.filter().nodeType === 1

これは、コード例に基づいて、編集.not(object)が空のコレクションも返す前に、現在の動作よりも論理的に見えることを意味します。

現在、 と の両方がフィルター処理されていないコレクションで動作しますが、前者の方法のみが動作の違いを示します.not(object).filter(object)

于 2012-12-07T15:44:54.373 に答える