【发布时间】:2012-06-29 13:46:01
【问题描述】:
我有一个函数创建一个 HTML/CSS 消息框,我想在其中显示一个变量(已经使用 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 实体转义 <>characters,不幸的是,我认为使用 DOM 方法不可能获得相同的结果。
我不能使用 document.createElement("b") 方法,这会使一切变得复杂,因为我希望我的 Message() 函数将完整样式的字符串作为一个参数。
所以我的想法是在某些情况下需要使用 innerHTML 而不是使事情复杂化,这取决于你如何使用它并不是一个坏习惯。
欢迎评论。
【问题讨论】:
-
元素节点(有意义的节点)的
.innerHTML属性是一个文档化的 HTML5 特性。 -
@Pointy 谢谢,这是否意味着它会像微软的 XMLHttpRequest 一样成为 DOM 的一部分? w3.org/TR/html5/embedded-content-0.html#dom-innerhtml
-
重要的一点是,今天所有重要的现代浏览器都支持它,包括所有 IE 版本、移动浏览器等。
标签: javascript html dom innerhtml