답변:
사용 insertAdjacentHTML
이 가능한 경우는 true, 그렇지 않은 경우는 대체 어떤 종류를 사용합니다. insertAdjacentHTML 은 현재의 모든 브라우저에서 지원됩니다 .
div.insertAdjacentHTML( 'beforeend', str );
라이브 데모 : http://jsfiddle.net/euQ5n/
insertAdjacentHTML
는 요소의 기존 자식을 직렬화하고 재분석하지 않기 innerHTML
때문에에 추가하는 것보다 빠릅니다 insertAdjacentHTML
.
insertAdjacentHTML
변경된 양식 요소의 값을 유지하는 반면에 추가 innerHTML
하면 요소가 다시 작성되고 모든 양식 컨텍스트가 손실됩니다.
이것이 허용됩니까?
var child = document.createElement('div');
child.innerHTML = str;
child = child.firstChild;
document.getElementById('test').appendChild(child);
jsFiddle .
그러나 , 닐의 대답은 더 나은 솔루션입니다.
innerHTML
?
insertAdjacentHTML
.
AppendChild
(E)는 크롬 및 사파리의 다른 솔루션보다 2 배 이상 빠르며, insertAdjacentHTML
(F)는 파이어 폭스에서 가장 빠릅니다. innerHTML=
(B) (와 혼동하지 마십시오+=
) A는 () 모든 브라우저에서 두 번째 빠른 솔루션이며 E와 F보다 훨씬 더 편리합니다
환경 설정 (2019.07.10) Chrome 75.0.3770 (64 비트), Safari 11.1.0 (13604.5.6), Firefox 67.0.0 (64 비트)에서 MacOs High Sierra 10.13.4
아이디어는 innerHTML
중간 요소에서 사용한 다음 모든 자식 노드를를 통해 원하는 위치로 이동하는 것 appendChild
입니다.
var target = document.getElementById('test');
var str = '<p>Just some <span>text</span> here</p>';
var temp = document.createElement('div');
temp.innerHTML = str;
while (temp.firstChild) {
target.appendChild(temp.firstChild);
}
이것은 이벤트 핸들러를 지우는 것을 방지 div#test
하지만 여전히 HTML 문자열을 추가 할 수 있습니다.
올바른 방법은 insertAdjacentHTML
. 8 이전의 Firefox에서는 태그 가 포함되지 않은 Range.createContextualFragment
경우 다시 사용할 수 str
있습니다 script
.
태그 str
가 포함 된 경우 조각 을 삽입하기 전에에서 반환 한 조각에서 요소 script
를 제거해야합니다 . 그렇지 않으면 스크립트가 실행됩니다. ( 스크립트를 실행할 수 없음으로 표시합니다.)script
createContextualFragment
insertAdjacentHTML
createContextualFragment
. 사용자가 쿠키 설정에 동의하는 경우에만 스크립트가 포함 된 일부 html 포함을 만드는 방법을 찾고있었습니다.
빠른 해킹 :
<script>
document.children[0].innerHTML="<h1>QUICK_HACK</h1>";
</script>
사용 사례 :
1 : .html 파일로 저장하고 chrome, firefox 또는 edge에서 실행합니다. (IE는 작동하지 않습니다)
2 : http://js.do 에서 사용
실행 중 : http://js.do/HeavyMetalCookies/quick_hack
주석으로 분류 :
<script>
//: The message "QUICK_HACK"
//: wrapped in a header #1 tag.
var text = "<h1>QUICK_HACK</h1>";
//: It's a quick hack, so I don't
//: care where it goes on the document,
//: just as long as I can see it.
//: Since I am doing this quick hack in
//: an empty file or scratchpad,
//: it should be visible.
var child = document.children[0];
//: Set the html content of your child
//: to the message you want to see on screen.
child.innerHTML = text;
</script>
내가 게시 한 이유 :
JS.do에는 두 가지 필수 항목이 있습니다.
그러나 console.log 메시지는 표시되지 않습니다. 빠른 해결책을 찾기 위해 여기에 왔습니다. 스크래치 패드 코드 몇 줄의 결과를보고 싶을 뿐이고 다른 솔루션은 작업이 너무 많습니다.
왜 허용되지 않습니까?
document.getElementById('test').innerHTML += str
그것을하는 교과서 방식 일 것입니다.
#test
입니다. 일반적으로 바람직하지 않습니다.
이것은 해결할 수 있습니다
document.getElementById("list-input-email").insertAdjacentHTML('beforeend', '<div class=""><input type="text" name="" value="" class="" /></div>');
InnerHTML은 기존 노드에 대한 이벤트와 같은 모든 데이터를 지 웁니다.
firstChild와 함께 자식 추가는 innerHTML에 첫 번째 자식 만 추가합니다. 예를 들어 다음을 추가해야하는 경우 :
<p>text1</p><p>text2</p>
text1 만 표시됩니다.
이것에 대해 :
자식을 추가하여 innerHTML에 특수 태그를 추가 한 다음 생성 한 태그를 삭제하여 outerHTML을 편집합니다. 얼마나 똑똑한 지 모르겠지만 나를 위해 작동하거나 outerHTML을 innerHTML로 변경할 수 있으므로 함수 바꾸기를 사용할 필요가 없습니다.
function append(element, str)
{
var child = document.createElement('someshittyuniquetag');
child.innerHTML = str;
element.appendChild(child);
child.outerHTML = child.outerHTML.replace(/<\/?someshittyuniquetag>/, '');
// or Even child.outerHTML = child.innerHTML
}
<div id="testit">
This text is inside the div
<button onclick="append(document.getElementById('testit'), '<button>dadasasdas</button>')">To div</button>
<button onclick="append(this, 'some text')">to this</button>
</div>
innerHTML
문자열을 요소 (모든 자식 대체)에insertAdjacentHTML
넣는 반면 (1) 요소 앞에, (2) 요소 뒤에, (3) 요소 내부에 첫 번째 자식 앞에 놓거나 (4) 마지막 자식 뒤의 요소 내부.