javascript - 使用 .innerHTML 转义字符有什么好处?

标签 javascript html

我想弄清楚如何在 JS/HTML 中使用转义字符,但我不知道该怎么做。我看过使用 .innerHTML 的示例,但我不明白如何使用。有人可以用简单的术语解释一下吗?

最佳答案

如果您将内容添加为原始文本(例如,作为文本节点的值),然后查询 .innerHTML在容器中,您会得到转义后的 HTML,因为如果您要设置 .innerHTML,它必须看起来像这样:

var d = document.createElement('span');
var t = document.createTextNode("<b>Hello World</b>");
d.appendChild(t);
console.log(d.innerHTML); // logs &lt;b&gt;Hello World&lt;/b&gt;

这就是 .innerHTML 的方式机制行为。

根据MDN documentation , 唯一受影响的字符是 < , > , 和 & .有时使用 HTML 实体对其他字符进行编码很有用。我认为最常见的情况是您想在 HTML 属性中使用引号。

使用浏览器 DOM 行为的替代方法是使用您自己的 JavaScript 函数。这是 doT template library 中使用的代码的(略有修改的)版本:

    function encodeHTMLSource() {
      var encodeHTMLRules = { 
          "&": "&#38;", "<": "&#60;", ">": "&#62;", '"': '&#34;', "'": '&#39;', "/": '&#47;'
        },
        matchHTML = /&(?!#?\w+;)|<|>|"|'|\//g;

        return function() {
          return this ? this.replace(matchHTML, function(m) {
            return encodeHTMLRules[m] || m;
          }) : this;
        };
    }
    String.prototype.encodeHTML = encodeHTMLSource();

此函数旨在添加到 String 原型(prototype)中,有些人可能会觉得不愉快(这似乎是最近的更改;我的旧版本不这样做)。这个想法是它使用一个闭包来保持从“顽皮”字符到它们的 HTML 实体等价物的映射,以及一个正则表达式来查找要转换的字符。完成上述操作后,您可以使用以下命令转义任何字符串:

  var escaped = "<b>Hello World</b>".encodeHTML();

编写正则表达式可以避免对现有 HTML 实体进行重新编码。

关于javascript - 使用 .innerHTML 转义字符有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21461091/

相关文章:

javascript - 如何解决这个 flex-box 垂直对齐问题?

javascript - 提交带有链接的表格

php - css/js 上的客户端缓存

html - 样式表未从 URL 加载(GitHub raw)

javascript - 有没有一种方法可以在用户使用 javascript 和 css 键入时设置文本区域内容的样式?

javascript - 为什么\W 元字符在此 Javascript 正则表达式中无法正常工作

javascript - 向javascript添加超时延迟?

javascript - 使用下拉列表中的参数从 View 调用 Web API

jquery - 将 onclick 转换为 onmouseover

javascript - FabricJS ClipTo 针对多个对象(例如组)的问题