原生 JavaScript 支持 HTML 属性编码和 JavaScript 字符串编码吗?

Tri*_*nko 7 html encoding attributes

属性值需要进行编码。如果我像这样构建一个 jQuery 对象:

$('<div data-value="' + value + '">');

实际上,value必须像这样进行属性编码:

$('<div data-value="' + HtmlAttributeEncode(value) + '">');

我找不到这样的原生函数。有些人认为这只是将双引号替换为 的问题&quot;,但微软的HttpEncoder.HtmlAttributeEncode方法对这四个字符进行了编码& < " '。我似乎有这样的实现quoteattr: https: //stackoverflow.com/a/9756789/88409,但这效率非常低,调用替换来多次迭代字符串。同样,我需要一个本机函数来编码 JavaScript 字符串(例如$('<div onclick="var s =\'' + HtmlAttributeEncode(JavaScriptStringEncode(value)) + '\';alert(s);"></div>).appendTo(body);<< 仅用于说明目的的示例)

是否有此功能的本机等效项?

注意:请不要提及escape(现已弃用,取而代之的是encodeURIencodeURIComponent)所有这些都与属性编码无关。

Que*_*tin 3

不。

但你不需要它们,因为你可以使用 DOM 方法(或围绕它们的 jQuery 包装器)构建元素,这绕过了转义的需要,因为你处理的是 DOM 而不是 HTML。

$('<div />', { "data-value" : value });
Run Code Online (Sandbox Code Playgroud)

或者

var div = document.createElement('div');
div.setAttribute('data-value', value);
Run Code Online (Sandbox Code Playgroud)

如果你确实想获取转义的 HTML,你可以获取 DOM 并从中生成 HTML:

var html = $('<div />').append(
    $('<div />', { "data-value" : value })
).html();
Run Code Online (Sandbox Code Playgroud)