如何将一个 HTML 字符串添加到页面中:
var str = '<p>Just some <span>text</span> here</p>';
如何将内容添加到具有id test
的<div>
中?
(顺便说一下,div.innerHTML += str;
是不可接受的。)
如何将一个 HTML 字符串添加到页面中:
var str = '<p>Just some <span>text</span> here</p>';
如何将内容添加到具有id test
的<div>
中?
(顺便说一下,div.innerHTML += str;
是不可接受的。)
使用insertAdjacentHTML
,它在所有现代浏览器中都受支持:
div.insertAdjacentHTML( 'beforeend', str );
beforeend
会在元素内部添加,在其最后一个子元素之后。
实时演示:http://jsfiddle.net/euQ5n/
AppendChild
(E)在Chrome和Safari上比其他解决方案快2倍以上,insertAdjacentHTML
(F)在Firefox上最快。在所有浏览器中,innerHTML=
(B)(不要与+=
(A)混淆)是第二快的解决方案,而且比E和F更加方便。
环境设置(2019.07.10)MacOS High Sierra 10.13.4上的Chrome 75.0.3770(64位),Safari 11.1.0(13604.5.6),Firefox 67.0.0(64位)
你可以在你的机器上重放测试here
function A() {
container.innerHTML += '<p>A: Just some <span>text</span> here</p>';
}
function B() {
container.innerHTML = '<p>B: Just some <span>text</span> here</p>';
}
function C() {
$('#container').append('<p>C: Just some <span>text</span> here</p>');
}
function D() {
var p = document.createElement("p");
p.innerHTML = 'D: Just some <span>text</span> here';
container.appendChild(p);
}
function E() {
var p = document.createElement("p");
var s = document.createElement("span");
s.appendChild( document.createTextNode("text ") );
p.appendChild( document.createTextNode("E: Just some ") );
p.appendChild( s );
p.appendChild( document.createTextNode(" here") );
container.appendChild(p);
}
function F() {
container.insertAdjacentHTML('beforeend', '<p>F: Just some <span>text</span> here</p>');
}
A();
B();
C();
D();
E();
F();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
This snippet only for show code used in test (in jsperf.com) - it not perform test itself.
<div id="container"></div>
innerHTML
的情况下反序列化字符串吗? - alex这个想法是在一个中间元素上使用 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
。如果你的str
不包含script
标签,那么在Firefox 8之前,你可以回退到使用Range.createContextualFragment
。str
包含script
标签,你需要在插入片段之前从createContextualFragment
返回的片段中删除script
元素。否则,这些脚本将会被执行。(insertAdjacentHTML
标记脚本为不可执行。)createContextualFragment
。我正在寻找一种方法,使一些包含脚本的HTML仅在用户同意设置Cookie时运行。 - schliflo快速 黑客攻击:
<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消息。 我来这里寻找一个快速解决方案。 我只想看到几行scratchpad代码的结果, 其他解决方案太麻烦了。
InnerHTML会清除所有现有节点的数据和事件
通过appendChild和firstChild添加到innerHTML中只会添加第一个子元素。例如,如果我们要添加:
<p>text1</p><p>text2</p>
只有文本1会显示
这个怎么样:
通过附加子元素并然后删除我们创建的标记来编辑outerHTML,添加特殊标记到innerHTML。不知道它有多聪明,但对我来说很有效 或者你可以将outerHTML更改为innerHTML,这样就不必使用replace函数了
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>
这可以解决
document.getElementById("list-input-email").insertAdjacentHTML('beforeend', '<div class=""><input type="text" name="" value="" class="" /></div>');
#test
上的事件处理程序失效,通常这是不可取的。 - alex"use strict"
try{
const fruits = new Map([["Banana",""],["Apples", ""], ["Orange"," "]]);
let text = "<h1>Fruits</h1>" + "<ul>";
fruits.forEach(function(value, key){
text += "<li>" + key + value + "<br>" + "</li>" });
text +="</li> ";
document.getElementById('demo').innerHTML = text;
}
catch(err){
document.getElementById('theError').innerHTML = err;
}
innerHTML
将字符串放入元素中(替换所有子元素),而insertAdjacentHTML
将其放置在(1)元素之前,(2)元素之后,(3)第一个子元素之前的元素内,或者(4)最后一个子元素之后的元素内。 - Šime VidasinsertAdjacentHTML
比将内容附加到innerHTML
中要快,因为insertAdjacentHTML
不会对元素的现有子元素进行序列化和解析。 - hsivoneninsertAdjacentHTML
保持了更改后的表单元素的值,而向innerHTML
添加内容会重建该元素并丢失所有表单上下文。 - Brandon GanoinsertAdjacentElement(..)
混淆,后者需要一个实际的Element
作为其第二个参数,而不是一个字符串:https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentElement - Abdull