2012-02-17 20 views
5

JavaScript'te işaretleme dizesini düğüm nesnesine dönüştürmenin bir yolu var mı? Aslında ben için subsitute arıyorum:İşaretleme dizesinden düğüm oluşturma

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

şey daha sonra kendi özelliklerini ve değerlerini takmak sonra da alt öğelerini eklemeniz tablo elemanı oluştururken oldukça createNodeFromString kullanarak

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

gibi!

+1

Neden innerHTML ayarının sizin için işe yaradığını merak ediyorum. InnerHTML'i ayarladıktan sonra, divOne'unuzu sorgulayarak sonuç elemanını alabilirsiniz. – akonsu

+0

@akonsu, divOne'da 'e sahip olduğunuz ve bu div'in dışında onclick = innerHTML-yöntemi olan bir düğmeniz olduğunu varsayalım. Şimdi, FF10 ve IE9'da (belge modu IE9 ile) metin kutusuna bir şey girin ve düğmeye basın, giriş değeri sıfırlanacak! Ben appendChild ile aynı şey olacağını görmek için çalışıyorum. Btw, IE8 uyumluluk modunda, giriş elemanının değeri sürekli .. –

+0

Eğer bir metin giriş alanı ve bir tuşa sahipseniz, düğmeye bastığınızda giriş alanının değeri temizleniyor? Bunu jsbin.com'da söyleyebilir misiniz? – akonsu

cevap

15

Bunun için mevcut bir tarayıcı karşıtı işlev yoktur.

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; 
} 

Kullanım (okunabilirlik için girinti): aşağıdaki yöntem, arzu edilen (this answer göre optimize edilmiş bir performans için DocumentFragment kullanılarak) bir etki elde etmek için kullanılabilir

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

Dandy! Bu mükemmel çözüm için teşekkürler. –

2

Evet, yapabilirsiniz yap bunu.

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

Eski IE sürümleri bu konuda şikayette bulunacaklar, çünkü '

' dahil olmak üzere bazı öğelerdeki 'innerHTML 'özelliğini ayarlamayı başaramazlar. Ayrıca bkz. [Bu makale] (http://support.microsoft.com/kb/239832). –