我在变量中有一个javascript节点,如果我将该变量记录到控制台,我会得到这个:
"​asekuhfas eo"
javascript节点中的一些随机字符串。我希望从字面上看它是一个字符串。但问题是,当我使用textContent
时,我得到了这个:
asekuhfas eo
转换特殊字符。我需要让字符串看起来像这样:
​asekuhfas eo
这样,我就可以处理特殊字符(识别它在字符串中的时间)。
如何将该节点对象显示为字符串LITERALLY?
答案 0 :(得分:3)
正如VisionN指出的那样,无法反转UTF-8编码。 但是,通过使用charCodeAt(),您仍然可以实现目标。
假设您有textContent。通过迭代每个字符,检索其charCode并预先添加"&#"以及附加";"你可以得到你想要的结果。这种方法的缺点显然是你将拥有这个注释中的每个角色,即使那些不需要它。通过引入某种阈值,您可以将其限制为仅限于异国情调的角色。
一种非常天真的方法是这样的:
var a = div.textContent;
var result = "";
var treshold = 1000;
for (var i = 0; i < a.length; i++) {
if (a.charCodeAt(i) > 1000)
result += "&#" + a.charCodeAt(i) + ";";
else
result += a[i];
}
答案 1 :(得分:1)
textContent
正确返回所有内容,​
为Unicode Character 'ZERO WIDTH SPACE' (U+200B),即:
通常缩写为ZWSP
此字符用于不可见的单词分隔和换行控制;它没有宽度,但它存在于两个字符之间并不能防止在对齐中增加字母间距
可以通过以下方式轻松证明:
var div = document.createElement('div');
div.innerHTML = '​xXx';
console.log( div.textContent ); // "xXx"
console.log( div.textContent.length ); // 4
console.log( div.textContent[0].charCodeAt(0) ); // 8203
如Eugen Timm中提到的那样his answer将UTF字符转换回HTML实体有点棘手,而且他的解决方案对于char代码高于1000
的非标准字符完全有效。作为替代方案,我可以提出一个更短的RegExp解决方案,它将得到相同的结果:
var result = div.textContent.replace(/./g, function(x) {
var code = x.charCodeAt(0);
return code > 1e3 ? '&#' + code + ';' : x;
});
console.log( result ); // "​xXx"
为了获得更好的解决方案,您可以查看可以处理所有HTML特殊字符的this answer。