我目前正在学习Javascript DOM和innerHTML,并在理解innerHTML时遇到了一些问题。
以下是我的代码:http://jsfiddle.net/hphchan/bfjx1w70/1/
我已经学习了标准的DOM方法和innerHTML方法,它工作正常,但我不知道为什么编码以下内容是错误的:
// this method fails
var element2 = document.createElement('p');
element2.innerHTML = "hello <em>Herbert</em>";
// standard methods of innerHTML method I learnt from textbook, BUT it requires to type tags in HTML
var element3 = document.getElementById('el');
element3.innerHTML = "innerHTML: hello <em>Herbert</em>";
我想问为什么它对第一种方法不起作用。这样做的问题是什么?另外,如果我不想在HTML中键入任何内容(包括标签)并希望使用innerText来实现与JSFiddle显示的相同的输出&#34; hello Herbert & #34;
答案 0 :(得分:2)
主要错误是innerText
用法。在大多数情况下,我会远离一般情况,因为innerHTML
适用于这两种情况。 (文字和标记)
虽然我认为innerText
如果你想要显示HTML代码而不是渲染它,那么它有它的魅力。
因此,因为字符串中有HTML标记,所以它不是普通的文本节点。如果您只是使用'hello Herbert'而不是'hello Herbert '那就可以了。
var element2 = document.getElementById('el');
element2.innerText = "hello Herbert";
<p id='el'></p>
另一个问题是你有这个元素,直到你实际把它放在DOM中,它是无用的,这就是为什么例2不起作用的原因。
尝试
document.body.appendChild(element2);
所以,
var element2 = document.createElement('p');
element2.innerHTML = "hello <em>Herbert</em>";
document.body.appendChild(element2);
希望它有所帮助!查看http://www.w3schools.com/jsref/met_node_appendchild.asp了解更多信息。
答案 1 :(得分:1)
由于body.setCollisionFlags(body.getCollisionFlags() | CollisionFlags.CF_KINEMATIC_OBJECT);
包含html标记(em),因此"hello <em>Herbert</em>"
无法正常工作,但innerText
无效。
答案 2 :(得分:0)
文字"hello <em>Herbert</em>"
并非完全是文字,因为其中包含HTML内容。在这种情况下,您确实需要使用innerHTML
:
element2.innerHTML = "hello <em>Herbert</em>";
答案 3 :(得分:0)
使用innerText
,您只能将没有格式的纯字符串应用于元素。如果您不希望元素中的文本被格式化,则在动态函数中很有用。如果它包含标签,它们将只显示为纯文本。使用innerHTML
,您可以向该元素添加任何内容,包括HTML-Tags。