Answers:
使用(insertAdjacentHTML
如果可用),否则使用某种后备。当前所有浏览器均支持 insertAdjacentHTML 。
div.insertAdjacentHTML( 'beforeend', str );
现场演示: http ://jsfiddle.net/euQ5n/
insertAdjacentHTML
比追加到快innerHTML
,因为insertAdjacentHTML
它不会序列化和解析元素的现有子元素。
insertAdjacentHTML
保持更改后的表单元素的值,而将追加到innerHTML
re会重建元素并丢失所有表单上下文。
这可以接受吗?
var child = document.createElement('div');
child.innerHTML = str;
child = child.firstChild;
document.getElementById('test').appendChild(child);
但是,尼尔的答案是一个更好的解决方案。
innerHTML
?
insertAdjacentHTML
。
AppendChild
(E)在chrome和safari上比其他解决方案快两倍以上,insertAdjacentHTML
(F)在Firefox上最快。在innerHTML=
(B)(不要混淆+=
(A))是在所有的浏览器第二快速的解决方案,这是更方便的比E和F.
在Chrome 75.0.3770(64位),Safari 11.1.0(13604.5.6),Firefox 67.0.0(64位)上设置环境(2019.07.10)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
。在Firefox 8之前的版本中,Range.createContextualFragment
如果您不str
包含任何script
标记,则可以退回使用。
如果str
包含script
标签,则需要在插入片段之前script
从返回的片段中删除元素createContextualFragment
。否则,脚本将运行。(将insertAdjacentHTML
脚本标记为不可执行。)
createContextualFragment
。我正在寻找一种方法,以使仅当用户同意设置Cookie时,脚本才会包含某些html。
快速黑客:
<script>
document.children[0].innerHTML="<h1>QUICK_HACK</h1>";
</script>
用例:
1:另存为.html文件,然后在chrome或firefox或edge中运行。(即不会工作)
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
将是教科书上的做法。
这样可以解决
document.getElementById("list-input-email").insertAdjacentHTML('beforeend', '<div class=""><input type="text" name="" value="" class="" /></div>');
InnerHTML清除现有节点的所有数据(如事件)
将带有firstChild的child追加到innerHTML中仅添加第一个孩子。例如,如果我们必须追加:
<p>text1</p><p>text2</p>
仅显示text1
那这个呢:
通过追加子项将特殊标签添加到innerHTML,然后通过删除我们创建的标签来编辑externalHTML。不知道它有多聪明,但是对我有用,否则您可以将externalHTML更改为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)在最后一个孩子之后的元素中。