6

私が達成したいことは、jquery を使用して DOM で作成されたドキュメントを、大きな html 文字列を渡すことによって操作することです。次の例を検討してください。

var doctype = document.implementation.createDocumentType( 'html', '', '');
var dom = document.implementation.createDocument('', 'html', doctype);
dom.documentElement.innerHTML = '<head><head><title>A title</title></head><body><div id="test">This is another div</div></body>'; 

これにより、コンテンツが提供された新しいドキュメントが dom に作成されます。ここで、jquery を使用して、既存の div 内に div を追加します。

$('#test',dom).append('<div> A second div</div>');
console.log(dom);

結果をコンソールに出力すると、「dom」の innerHTML が変更されていないようです。jquery の API ドキュメントから、http://api.jquery.com/jQuery/より具体的な「jQuery( selector [, context ] )」関数でこれを許可する必要があります。

誰かがコンソールを使用してデバッグすることについて議論する可能性があるため、動作しないコードの別の部分を以下に示します。

$('body').append($('#test',dom));

chrome と firefox でテスト済みですが、最新の jquery ライブラリでは動作しません。

4

3 に答える 3

4

コンストラクターを変更し、以下の行を使用することにより

var dom = document.implementation.createHTMLDocument("Test");

最初に導入された 2 行の代わりに

var doctype = document.implementation.createDocumentType( 'html', '', '');
var dom = document.implementation.createDocument('', 'html', doctype);

innerHTML を直接設定しても、すべて正常に動作します。

于 2013-03-19T10:09:23.167 に答える
2

HTMLコンテンツ全体を設定しているように見えますが、それはinnerHTML機能しません。

コードを試してみると、次の場合も結果が得られないことがわかります。

dom.documentElement.getElementsByTagName('body')

そしてそれdom.bodynullです。ただし、を設定するだけでなくオブジェクトを作成する場合はinnerHTML、上記jQueryセレクターの両方が機能します。

dom.body = document.createElement('body');
dom.body.appendChild(document.createElement('div'));

console.log($('div', dom));
于 2013-03-18T11:00:41.710 に答える
0

はい、可能です。jQuery の 2 番目のインスタンスを作成する必要があります。このフィドルを確認してください:http://jsfiddle.net/hDcUp/

var jq2 = jQuery(dom);
于 2013-03-18T14:35:25.973 に答える