2011-09-25 2 views
7

현재 범위 (W3C 범위)에 html을 삽입하고 싶습니다.왜 document.createHTMLNode()가 없습니까?

나는 insertNode 메소드를 사용해야한다고 생각한다. 텍스트와 잘 어울립니다.

예 :

var node = document.createTextNode("some text"); 
range.insertNode(node); 

문제는 내가 ("<H1> 테스트 </H1 > 좀 더 텍스트"같은 것을 수 있습니다) HTML을 삽입 할 것입니다. 그리고 createHTMLNode()도 없습니다.

createElement ('div')를 사용하여 id를주고 HTML을 innerHTML로 사용하려고 시도했지만 삽입 후 nodeValue로 바꾸려고했지만 DOM 오류가 발생합니다.

삽입하려는 html 주위에 여분의 html 요소가 없으면이를 수행 할 수있는 방법이 있습니까?

+1

을 (https://developer.mozilla.org/en/DOM/range 여기

는 예제 .insertNode) DOM 요소를 잘 삽입 할 수 있습니다. 따라서 코드와 오류 메시지를 게시 해 주시면 디버깅을 도와 드리겠습니다 .. –

+0

jsFiddle 데모 (또는 코드 자체)를 제공해 주시겠습니까? 나는 너의 상황을 재현 할 수 있을지 모르겠다. 그래서 범위와 많이 일하지 않았다. ... –

답변

6

"<h1>test</h1>some more text"은 HTML 요소와 두 개의 텍스트로 구성되기 때문에. a 노드가 아닙니다.

HTML을 삽입하려면 innerHTML을 사용하십시오.

내가 삽입하고 싶은 html 주위에 여분의 html 요소가 없으면이를 수행 할 수있는 방법이 있습니까?

요소를 만듭니다 (문서에 추가하지 않음). innerHTML을 설정하십시오. 그런 다음 foo.childNodes을 반복하여 모든 하위 노드를 이동합니다.

+0

아. 좋은 대답. 매력처럼 작동합니다 :) 고마워요! – Martin

3

innerHTML 대신 appendChild (요소)를 사용하십시오. this 도움을 받으실 수 있습니다. 여기에 의견을 원하면 사례를 드리겠습니다.

+0

물론이 작업을 수행하는 가장 좋은 방법입니다. – Rob

4

일부 브라우저 (특히 IE 버전이 아님)의 경우 Range 개체는 원래 비표준 인 createContextualFragment()을 가질 수 있습니다. Internet Explorer와 같은 브라우저의 향후 버전에서는 이제 it has been standardized이 구현됩니다.

var frag = range.createContextualFragment("<h1>test</h1>some more text"); 
range.insertNode(frag);