2012-02-17 2 views
5

JavaScript에서 마크 업 문자열을 노드 객체로 변환하는 방법이 있습니까? 사실은 내가위한 subsitute가 찾고 있어요 :마크 업 문자열에서 노드 만들기

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

뭔가 다음 각각의 속성과 값을 연결 한 후 그 자식 요소를 추가 테이블 요소를 생성하지 않고 createNodeFromString 사용

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

처럼!

+1

왜 innerHTML 설정이 효과가 없는지 궁금합니다. innerHTML을 설정하면 divOne을 쿼리하여 결과 요소를 가져올 수 있습니다. – akonsu

+0

@akonsu, 아마도 divOne에 가 있고이 div 외부에 onclick = innerHTML-method가있는 버튼이 있습니다. 이제 FF10과 IE9 (문서 모드 IE9 사용)에서 텍스트 상자에 내용을 입력하고 버튼을 누르면 입력 값이 재설정됩니다! 나는 appendChild와 같은 일이 일어날 것을보고 싶다. Btw, IE8 호환 모드에서 입력 요소의 값은 지속적입니다. –

+0

텍스트 입력 필드와 버튼이있는 경우 버튼을 누르면 입력 필드의 값이 지워진다는 것을 말하고 있습니까? jsbin.com에서 이것을 증명할 수 있습니까? – akonsu

답변

15

여기에는 기존의 교차 브라우저 기능이 없습니다.

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

사용 (읽기 쉽도록 들여 쓰기) : 다음 방법은 원하는 (this answer을 기반으로 최적의 성능을 위해 DocumentFragment를 사용) 효과를 얻을 수 있습니다

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)를 참조하십시오. –