【发布时间】:2015-01-25 06:22:29
【问题描述】:
在开发工具时(鉴于我能够开发以下MCVE 的问题,我认为此处不重要的细节),我注意到,至少在 Chrome 和 Firefox 版本中在我的桌面上,我从innerHTML 属性获得的字符串不等于我在 HTML 文件上静态编写的原始源代码。
console.log(document.querySelector("div").innerHTML);
/*
<table>
<tbody><tr>
<td>Hello</td>
<td>World</td>
</tr>
</tbody></table>
*/
<div>
<table>
<tr>
<td>Hello</td>
<td>World</td>
</tr>
</table>
</div>
您可能已经注意到,出现了一个自发的<tbody> 标签(我没有将它添加到我的 HTML 源代码中!),显然是由于页面之间的预处理时间下载 和页面onload 事件。在这种特殊情况下,出于我的应用目的,此修改不会产生错误,因此可以忽略。
事实证明,在某些情况下,这种更改可能是灾难性的,特别是当 all 标记被删除时,如下例所示。
console.log(document.querySelector("div").innerHTML);
/*
Hello
World
*/
<div>
<td>Hello</td>
<td>World</td>
</div>
显然,在这种情况下,原始标记存在 问题,但在我的应用程序中,“误用”(如 <div> 中的 <td>)被接受。 不接受的是 innerHTML 根本没有 HTML 标记,这导致了主要问题:我怎样才能获得 @987654332 的原始静态编码 HTML 标记@元素?
另外,如果可能的话,也很高兴知道为什么以及如何发生这种现象,因为我很好奇 :D
【问题讨论】:
-
你可能想看看这里,虽然它可能不是你问题的答案:stackoverflow.com/questions/938083/…
-
链接是相关的,但仍然不能解决我的问题......无论如何,这是信息丰富的 :D 谢谢!
-
试图将
td误用为div的子代not 起作用。您无法设置td元素的样式或在脚本中访问它们,仅仅是因为它们不存在 -<td>和</td>标记将被忽略。 -
你问了一个有效的问题,但我想知道你是否有一个有效的用例,这实际上可能会导致代码出现问题。当您这样做时,我希望修复将是简单而明显的——但是尝试使用灵活的语法原型工具预测所有可能的问题既不简单也不明显,而且可能会浪费大量时间。正如 Jukka 指出的那样,您的第二个示例并不完全是一个有效的用例。
-
是的......你们都说得对,它在原版 HTML 中无效。但是我的工具所做的实际上是填补了由于缺少
<table>和<tr>标记而留下的空白,在本例中,通过在运行时插入那些<td>以试图降低标记的复杂性。它是页面原型设计的内部解决方案,实际上它已经运行得非常好,但我想通过消除这个障碍来改进它。
标签: javascript html dom browser