2012-02-17 11 views
5

マークアップ文字列をJavaScriptのノードオブジェクトに変換する方法はありますか?テーブル要素を作成するというマークアップ文字列からノードを作成

createNodeFromString使用
document.getElementById("divOne").appendChild(document.createNodeFromString("<table><tbody><tr><td><input type='text' value='0' /></td></tr></tbody></table>")) 

のようなものが、その後、それぞれの属性と値を添付し、その子要素を追加

document.getElementById("divOne").innerHTML += "<table><tbody><tr><td><input type='text' value='0' /></td></tr></tbody></table>" 

:実は私はのためのsubsituteを探しています!

+1

なぜinnerHTMLの設定が機能しないのですか。 innerHTMLを設定すると、divOneを照会することで結果の要素を取得できます。 – akonsu

+0

@akonsu、おそらくdivOneにがあり、このdivの外にonclick = innerHTML-methodのボタンがあります。今、FF10とIE9(文書モードIE9で)テキストボックスに何かを入力し、ボタンを押すと、入力の値がリセットされます! appendChildを使って同じことが起こるのを見たいと思っています。 Btw、IE8互換モードでは、入力要素の値は永続的です。 –

+0

ボタンを押すと、入力フィールドとボタンがあると入力フィールドの値がクリアされますか? jsbin.comでこれを実証できますか? – akonsu

答えて

15

これには既存のクロスブラウザ機能はありません。以下の方法は、(this answerに基づいて、最適化されたパフォーマンスのためDocumentFragmentを使用して)所望の効果を達成するために使用することができます。

function appendStringAsNodes(element, html) { 
    var frag = document.createDocumentFragment(), 
     tmp = document.createElement('body'), child; 
    tmp.innerHTML = html; 
    // Append elements in a loop to a DocumentFragment, so that the browser does 
    // not re-render the document for each node 
    while (child = tmp.firstChild) { 
     frag.appendChild(child); 
    } 
    element.appendChild(frag); // Now, append all elements at once 
    frag = tmp = null; 
} 

使用(読みやすくするためにインデント):

appendStringAsNodes(
    document.getElementById("divOne"), 
    "<table><tbody><tr><td><input type='text' value='0' /></td></tr></tbody></table>" 
); 
+0

ダンディー!この優れた回避策をありがとうございました。 –

2

はい、できますそれを行う。

var myNewTable = document.createElement("table"); 
myNewTable.innerHTML = "<tbody><tr><td><input type='text' value='0' /></td></tr></tbody>" 
document.getElementById("divOne").appendChild(myNewTable); 
+0

古いIEのバージョンでは、 '

'を含むいくつかの要素で 'innerHTML'プロパティの設定を処理できないため、これについて不平を言います。 [この資料](http://support.microsoft.com/kb/239832)も参照してください。 –

関連する問題