我有像
var str = 'One & two & three';
由Web服务器呈现为HTML。我需要将这些字符串转换为
'One & two & three'
当前,这就是我正在做的事情(借助于jQuery):
$(document.createElement('div')).html('{{ driver.person.name }}').text()
但是我有一种不安的感觉,我做错了。我努力了
unescape("&")
但它似乎无效,decodeURI / decodeURIComponent也无效。
还有其他更自然,更优雅的方式吗?
用于从JavaScript解释HTML(文本和其他形式)的一个更现代的选项是DOMParserAPI中的HTML支持。这使您可以使用浏览器的本机HTML解析器将字符串转换为HTML文档。自2014年底以来,所有主要浏览器的新版本均已支持该功能。
DOMParser
如果我们只想解码一些文本内容,则可以将其作为唯一的内容放入文档正文中,解析文档,然后将其拉出.body.textContent。
.body.textContent
var encodedStr = 'hello & world'; var parser = new DOMParser; var dom = parser.parseFromString( '<!doctype html><body>' + encodedStr, 'text/html'); var decodedString = dom.body.textContent; console.log(decodedString);
我们可以在规范草案中DOMParser看到,已解析的文档未启用JavaScript,因此我们可以执行此文本转换而无需担心安全性。
该parseFromString(str, type)方法必须运行以下步骤,具体取决于 类型 : "text/html" 用an 解析 strHTML parser,并返回新创建的Document。 脚本标记必须设置为“禁用”。 注意 script元素被标记为不可执行,并且将其内容noscript解析为标记。
该parseFromString(str, type)方法必须运行以下步骤,具体取决于 类型 :
parseFromString(str, type)
"text/html"
用an 解析 strHTML parser,并返回新创建的Document。
HTML parser
Document
脚本标记必须设置为“禁用”。
注意 script元素被标记为不可执行,并且将其内容noscript解析为标记。
注意
script元素被标记为不可执行,并且将其内容noscript解析为标记。
script
noscript
这超出了此问题的范围,但是请注意,如果您要获取解析的DOM节点本身(而不仅仅是它们的文本内容)并将其移至实时文档DOM,则可能会重新启用其脚本,并且可以出于安全考虑。我尚未对此进行研究,因此请谨慎行事。