Javascript innerHTML似乎是解决这个问题的唯一好办法

Javascript innerHTML似乎是解决这个问题的唯一好办法,javascript,html,dom,innerhtml,Javascript,Html,Dom,Innerhtml,我有一个创建HTML/CSS MessageBox的函数,我想在其中显示一个变量(已经用PHP json_encode()转义了,不可能使用XSS注入)。 我想在硬编码消息中显示此变量,它始终是同一消息。 此消息在HTML粗体标记之间显示此变量: 消息(“您真的要删除“+reference+”?”); 传递给Message()函数的字符串将添加到div标记中,如果希望以粗体样式显示变量引用,唯一的解决方案是使用innerHTML 很多人说“不要使用innerHTML,因为它不是标准化的”,“它

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

消息(“您真的要删除“+reference+”?”);
传递给Message()函数的字符串将添加到div标记中,如果希望以粗体样式显示变量引用,唯一的解决方案是使用innerHTML

很多人说“不要使用innerHTML,因为它不是标准化的”,“它是Microsoft的专有功能,不是W3C,可能不再受支持”

我一直使用DOM方法,但在我的例子中,DOM1 myDiv.firstChild.nodeValue属性甚至DOM3 myDiv.textContent方法都不起作用,因为字符串仅显示为文本

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

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

所以我的想法是,在某些情况下需要使用innerHTML,而不是使事情复杂化,这是一个不错的做法,取决于您如何使用它


欢迎评论。

是的。您可以通过innerHTML与其他方法阅读舒缓效果。

是的。您可以阅读innerHTML与其他方法的对比。

我相信
.innerHTML
可以很好地使用。查看此处的兼容性统计信息:它们还强调了使用此方法相对于DOM方法的性能提升。

我相信
.innerHTML
可以很好地使用。查看此处的兼容性统计信息:它们还强调了使用此方法相对于DOM方法的性能提升。

大多数针对
innerHTML
的讨论都非常过时
innerHTML
几乎得到了普遍支持(IE中存在一些狭隘的兼容性问题),现在是is-than-DOM方法的一部分(EDIT:或not,请参见注释),并产生了更干净的代码

如果没有
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);

您必须重构
消息
函数,以获取DOM
节点
(或
节点
的数组)而不是文本字符串。总而言之,我想说这绝对不值得——除非你针对的是IE5

大多数针对
innerHTML
的讨论都非常过时
innerHTML
几乎得到了普遍支持(IE中存在一些狭隘的兼容性问题),现在是is-than-DOM方法的一部分(EDIT:或not,请参见注释),并产生了更干净的代码

如果没有
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);


您必须重构
消息
函数,以获取DOM
节点
(或
节点
的数组)而不是文本字符串。总而言之,我想说这绝对不值得——除非你瞄准的是IE5

。元素节点的
.innerHTML
属性(对于那些有意义的节点)是一个有文档记录的HTML5功能。@非常感谢,这是否意味着它将像微软的XMLHttpRequest一样成为DOM的一部分?重要的一点是,现在每个重要的现代浏览器都支持它,包括所有IE版本、移动浏览器等。元素节点(有意义的节点)的
.innerHTML
属性是一个有文档记录的HTML5功能。@非常感谢,这是否意味着它将成为DOM的一部分,就像微软的XMLHttpRequest被接受一样?重要的一点是,它现在在所有重要的现代浏览器中都得到了支持,包括所有IE版本、移动浏览器等。DOM3 textContent>DOM1 nodeValue>DOM0 innerHTML根据这项测试,Quirksomde基准测试是用Firefox 3和Chrome 5完成的,性能似乎发生了变化。DOM3 textContent>DOM1 nodeValue>DOM0 innerHTML根据此测试,Quirksomde基准测试是用Firefox 3和Chrome 5完成的,性能似乎发生了变化。是的,它并不漂亮,也不复杂,这意味着每次你想显示消息时都必须创建div节点,太傻了!div节点是在my Message()函数中创建的,这个标记是MessageBox的一部分,因此不在这个函数中创建div是毫无意义的:)顺便说一下,我不确定innerHTML在最近的浏览器中是否比DOM方法快,您可以生成一个子节点数组,并使用
message
将它们作为子节点附加到div中,但这也不是太好。链接的jsperf测试似乎只将
innerHTML
用作getter,而不是setter;我希望看到一个使用它来创建新节点的测试(也许我会创建一个)。后续:看起来
innerHTML
在现代浏览器中的编写速度也较慢。quirksmode测试页面有“test now”链接,这表明(无论如何,对我来说)DOM方法现在的编写速度大约是现在的两倍。是的,它并不漂亮,也不复杂,这意味着每次你想显示消息时都必须创建div节点,这很愚蠢!div节点是在my Message()函数中创建的,这个标记是MessageBox的一部分,因此不在这个函数中创建div是毫无意义的:)顺便说一下,我不确定innerHTML在最近的浏览器中是否比DOM方法快,您可以生成一个子节点数组,并使用
message
将它们作为子节点附加到div中,但这也不是太好。链接的jsperf测试似乎只将
innerHTML
用作getter,而不是setter;我希望看到一个测试使用它来创建新的n