2012-10-19 52 views
2


我有此代碼將字符串轉換爲Dom節點的JavaScript?

var tmpEl = document.createElement('div') 
tmpEl.innerHTML = stringEl; 
return tmpEl.firstChild 

我使用用於將文本轉換爲DOM節點。 的問題是,如果stringEl包含<tr>標籤我必須創建table標籤不div對於這work.Also如果想要這個代碼與stringEl contaning li標籤我必須創建olul insted的div標籤的工作。有沒有通用的字符串轉換爲Dom節點?
最好的問候,
約爾丹

+0

如果你提供的不同的價值觀您'stringEl'和你所期望的到底是什麼,它可能有助於理解你的問題。 – skovalyov

+0

我認爲你低估了這個問題的複雜性。這個片段在處理受限制的元素集時很有用,但如果打算是通用的,它就太鬆了。檢查jQuery(.parseHTML,.buildFragment)的相關功能,看看它是如何解決的;提示:它遠離3行代碼。 – raina77ow

回答

2
function domNode(nodeType, text) { 
var node = document.createElement(nodetype); 
node.appendChild(document.createTextNode(text)); 
return node; 
} 

domNode('p', 'Hello World!'); 

喜歡的東西,可以讓你選擇一個標籤。

編輯:其實......

function domNode(nodeType, text) { 
    var node = document.createElement(nodetype); 
    if (text) node.appendChild(document.createTextNode(text)); 
    return node; 
    } 

var myList = domNode('ul').appendChild(domNode('li', 'This is a list item!')); 
2

有專爲這個DOM範圍的方法:createContextualFragment()。它在DOM Parsing and Serialization spec中指定,並且實現了Mozilla,WebKit和Opera瀏覽器(但不包括IE)。

下面是一個例子:http://jsfiddle.net/gbWCS/

HTML:

<table id="table"> 
    <tr id="firstRow"><td>One</td><td>Two</td></tr> 
</table> 

的JavaScript:

var html = "<tr><td>Three</td><td>Four</td></tr>"; 
var table = document.getElementById("table"); 
var range = document.createRange(); 
range.selectNodeContents(table); 
var frag = range.createContextualFragment(html); 
table.appendChild(frag);