0

我有一个创建 HTML/CSS MessageBox 的函数,我想在其中显示一个变量(已经使用 PHP json_encode() 进行了转义,不可能进行 XSS 注入)。我想在硬编码消息中显示此变量,它始终是相同的消息。该消息在 HTML 粗体标记之间显示此变量<b></b>

Message("Do you really want to delete <b>" + reference + "</b> ?");

传递给 Message() 函数的字符串将添加到 div 标记中,如果我希望变量引用以粗体样式显示,我唯一的解决方案是使用 innerHTML。

很多人说“不要使用innerHTML,它没有标准化”,“这是微软专有功能,不是W3C,可能不再受支持”。

我一直使用 DOM 方法,但就我而言,DOM1 myDiv.firstChild.nodeValue 属性甚至 DOM3 myDiv.textContent 方法都不起作用,因为字符串仅显示为文本。

innerHTML 方法的优点是不<>使用 HTML 实体转义字符,不幸的是我认为使用 DOM 方法不可能获得相同的结果。

我不能使用 document.createElement("b") 方法,这会使一切变得复杂,因为我希望我的 Message() 函数将完整样式的字符串作为一个参数。

所以我的想法是在某些情况下需要使用 innerHTML 而不是使事情复杂化,这取决于你如何使用它并不是一个坏习惯。

评论表示赞赏。

4

3 回答 3

3

大多数反对innerHTML的讨论都已经过时了。 innerHTML几乎得到普遍支持(在 IE 中存在一些狭窄的兼容性问题),现在是HTML5 草案的一部分,比 DOM 方法快得多(编辑:或不编辑,请参阅评论),并产生更清晰的代码。

如果没有,您想要做的事情是可能innerHTML的,但这并不漂亮:

var div = document.createElement("div");
var b = document.createElement("b");
b.appendChild(document.createTextNode(reference));
div.appendChild(document.createTextNode("Do you really want to delete "));
div.appendChild(b);
div.appendChild(document.createTextNode("?"));
Message(div);

而且您必须重构您的Message函数以采用 DOM Node(或 s 数组Node)而不是文本字符串。总而言之,我会说这绝对不值得——除非你的目标是 IE5

于 2012-06-29T13:59:29.047 回答
0

是的。您可以阅读关于 innerHTML 与其他方法的舒缓quirksmode 基准测试。

于 2012-06-29T13:51:18.847 回答
0

我相信这.innerHTML很好用。在此处查看兼容性统计信息:http ://www.quirksmode.org/dom/w3c_html.html ,它们还强调了使用此方法相对于 DOM 方法的性能提升。

于 2012-06-29T13:52:16.050 回答