在将内容从 div 复制到页面标题时,如何防止 HTML 对“&”字符进行编码?

How do I prevent HTML encoding of '&' characters while copying content from a div to the title of the page?

我有一个 div 其内容是我的主页和管理
<div id="abc"> My Home & Administration></div>

在脚本中,我需要将这个div的内容复制到我的页面标题中。目前我正在使用 innerHTML 属性 对值进行编码。

<script type="text/javascript>
var id = document.getElementById("abc");
document.title = id.innerHTML;
</script>

标题显示为我的家&管理 (注:忽略&和amp;之间的space)

有没有其他方法可以让标题按原样显示? 我不能使用 JQuery 或除了纯粹和简单的任何框架 Javascript

另请注意,这不是 URL 编码,而是将字符转换为其 HTML 实体。

您可以使用 .textContent 而不是 .innerHTML

.innerHTML 实际上不是 DOM 规范的一部分。大多数浏览器都将其作为非标准功能提供。 .innerHTML.

有几个问题

由于您对节点的实际文本值感兴趣,因此可以使用 .textContent

知道 div abc 实际上有一个节点,一个 TextNode,它保存值可能是有用的。 div 本身实际上并没有保存值。如果您要遍历 DOM,您会看到这个文本节点。

如果您的 HTML 是:

<div id="abc">Foo <strong>bar</strong> baz</div>

您的结构将是:

`div`:abc
  TextNode Foo
  `strong`
    TextNode bar
  TextNode baz

在这种情况下 abc.textContent 将 return "Foo bar baz" 所以它会忽略 strong 标签。

相比之下 .innerHTML 将 return "Foo <strong>bar</strong> baz"

同样适用于:

<div id="abc">Foo&amp;Bar</div>

.textContent 将是 "Foo&Bar".innerHTML 将是 "Foo&amp;Bar"