Javascript innerHTML

时间:2015-07-09 11:43:39

标签: javascript innerhtml createelement

我目前正在学习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;

4 个答案:

答案 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。

编辑:现在我刚刚看到你的问题是元素甚至根本没有显示,我只是觉得你想知道赫伯特为什么没有斜体。在这种情况下,因为你没有将第二个元素附加到正文,就像你在第一个版本中所做的那样。第三个版本不创建元素,它使用现有元素,因此您不需要附加它。 ;)