これを壊して申し訳ありませんが、「信頼できるjQueryベースのコード」という用語は矛盾しています。FWIW:
jQuery は、現在人気のある他のいくつかのスクリプト フレームワークと同様に、 W3C DOM Level 2+ Core (略して)のインターフェイスをArray
実装するオブジェクトではなく、クエリ結果を保持するために のようなオブジェクトを作成します。Aはライブです。ホストオブジェクトではなく、ネイティブの ECMAScript オブジェクトであるようなオブジェクトは (通常) そうではありません。NodeList
NodeList
NodeList
Array
このようなフレームワークを使用しない場合、すべての (準) 標準 DOM メソッド ( などgetElementsByClassName()
) およびプロパティ ( など) が(場合によってはdocument.forms
) を返す/生成するため、この問題は発生しません。NodeList
HTMLCollection
DOM Level 2 Eventsはミューテーション イベント タイプを指定しましたが、DOM Level 3 Events ( Working Draft ) の時点でそれらは非推奨になり、その上のフックは現在信頼できず、おそらく相互運用性さえありません。
そのため、jQuery の結果やミューテーション イベントではなく、(準) 標準メソッドを使用する必要があります。
ただし、それでも jQuery(-ish) の方法 (他のすべての目に見えない欠点がある) を使用したい場合は、Node
のparentNode
プロパティを確認する必要があります。 Node
ノードではないDocument
が、ドキュメント ツリー内にある s には非null
parentNode
プロパティ値があります (一方、null
は W3C DOM レベル 2+ コア仕様の言語に依存しないと理解されるnull
ため、型変換されるすべての値を探す必要があります。true
ECMAScript 実装で)。したがって、他のすべてのNode
s には のparentNode
プロパティ値があるため、ECMAScript 実装でnull
型変換されるもの。false
要素がs でmyNodes
あるインスタンスを参照し、そのようなノード オブジェクトの 1 つを参照すると仮定すると、次のように動作するはずです。Array
Node
myNode
var i = 0;
/* … */
var myNode = myNodes[i];
if (!myNode.parentNode)
{
myNodes.splice(i, 1);
}
myNodes
次に、 through と呼ばれる関数などでときどき反復しwindow.setInterval()
、そこから「古い」ノードを削除することができます。確かに a ほど良くはありませんが、NodeList
jQuery を使用せずにノードが削除された場合や、ミューテーション イベント タイプがランタイム環境でサポートされていない場合でも機能します。
残念ながら、インスタンスjQuery()
への参照を返しません。Array
したがって、最初に次のように作成する必要があります。
var jqObj = jQuery("…");
/* or jQuery.makeArray(jqObj) */
var a = Array.prototype.slice.call(jqObj, 0);
(ここでは、によって参照されるオブジェクトがプロパティjqObj
を持っているという事実を使用していlength
ます。)
jQuery プラグインに適したスタイルとは何かは言えません。その理由は今では明らかなはずなので、そもそも jQuery を使用しないようにしています。
また、JavaScript などのプログラミング言語*と、それらと一緒に使用できる (通常は言語に依存しない) API (DOM など)を区別することも学ぶ必要があります。
HTH。