これを壊して申し訳ありませんが、「信頼できるjQueryベースのコード」という用語は矛盾しています。FWIW:
jQuery は、現在人気のある他のいくつかのスクリプト フレームワークと同様に、 W3C DOM Level 2+ Core (略して)のインターフェイスをArray実装するオブジェクトではなく、クエリ結果を保持するために のようなオブジェクトを作成します。Aはライブです。ホストオブジェクトではなく、ネイティブの ECMAScript オブジェクトであるようなオブジェクトは (通常) そうではありません。NodeListNodeListNodeListArray
このようなフレームワークを使用しない場合、すべての (準) 標準 DOM メソッド ( などgetElementsByClassName()) およびプロパティ ( など) が(場合によってはdocument.forms) を返す/生成するため、この問題は発生しません。NodeListHTMLCollection
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ため、型変換されるすべての値を探す必要があります。trueECMAScript 実装で)。したがって、他のすべてのNodes には のparentNodeプロパティ値があるため、ECMAScript 実装でnull型変換されるもの。false
要素がs でmyNodesあるインスタンスを参照し、そのようなノード オブジェクトの 1 つを参照すると仮定すると、次のように動作するはずです。ArrayNodemyNode
var i = 0;
/* … */
var myNode = myNodes[i];
if (!myNode.parentNode)
{
myNodes.splice(i, 1);
}
myNodes次に、 through と呼ばれる関数などでときどき反復しwindow.setInterval()、そこから「古い」ノードを削除することができます。確かに a ほど良くはありませんが、NodeListjQuery を使用せずにノードが削除された場合や、ミューテーション イベント タイプがランタイム環境でサポートされていない場合でも機能します。
残念ながら、インスタンス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。