8

を使用してjQueryで新しいhtmlノードを作成する場合

$('<some-node>some html code</some-node>');

アタッチするまで、DOMの一部にはなりません。ただし、ノードに親がないという意味ではありません。

ノードが空で作成されていない場合、例:

var myNewNode = $('<div>Hello</div>');

親を確認できます。

myNewNode[0].parentNode; // Who is the parent?

そして、あなたが得るのを見てください

DocumentFragment

結果として。DocumentFragmentは似たようなオブジェクトdocumentですが、DOMツリーの一部ではありません。

奇妙なことが今やってくる。空のノードを作成すると、

var myNewEmptyNode = $('<div></div>');

内容を確認してみてください

myNewEmptyNode[0].parentNode; // Who is now the parent?

驚くべきことにあなたは

null

この動作を理解できず、jQueryのドキュメントで何も見つかりませんでした。空のdivでjavascriptMVCmxuiモーダルが失敗した理由をデバッグしようとしたときに見つかりました。

ChromiumとOperaの両方でこの動作をテストしたので、ブラウザ関連の問題ではないようです。

誰かがこれについて説明がありますか?

4

2 に答える 2

12

これは、jQueryがdocument.createElement「迅速な」HTML文字列に使用するがjQuery.buildFragment、他のすべての(より「複雑な」)HTML文字列には使用するという事実によるものです。<div></div>速いと見なされますが、<div>a</div>そうではありません。

http://jsfiddle.net/PzBSY/2/で確認できるように、フィドルを設定しました。

「クイック」は正規表現で定義されます。

var rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;

これは空のdiv文字列を渡しますが、空でないdiv文字列は渡しません。2つのブランチを作成するチェックの後のif/elseブロックに注意してください。

つまり、基本的には、jQueryが空でないdivを使用してドキュメントフラグメントを明示的に作成するのに対し、空のdivを使用しないためです(document.createElement("div")代わりに使用するだけです)。

于 2012-04-29T15:32:00.207 に答える
1

target有効なjQueryセレクターは次のとおりです。

DOMにノードを作成するだけで$('<div></div>')はありません。仮想的に作成するだけで、ドキュメントに配置しません。DOMに挿入するには、append(), appendTo(), insert()etcなどのメソッドを使用する必要があります。

$('target').append($('<div class="latest"></div>'));
$('div.latest').parent();

divここでは、 withクラスを挿入し、latestそれを追加した後、メソッドを使用してその親ノードを取得しますparent()

于 2012-04-29T13:17:10.843 に答える