获取javascript节点原始内容

时间:2014-11-21 15:08:54

标签: javascript string object

我在变量中有一个javascript节点,如果我将该变量记录到控制台,我会得到这个:

"​asekuhfas eo"

javascript节点中的一些随机字符串。我希望从字面上看它是一个字符串。但问题是,当我使用textContent时,我得到了这个:

​asekuhfas eo

转换特殊字符。我需要让字符串看起来像这样:

​asekuhfas eo

这样,我就可以处理特殊字符(识别它在字符串中的时间)。

如何将该节点对象显示为字符串LITERALLY?

2 个答案:

答案 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正确返回所有内容,&#8203;Unicode Character 'ZERO WIDTH SPACE' (U+200B),即:

  

通常缩写为ZWSP

     

此字符用于不可见的单词分隔和换行控制;它没有宽度,但它存在于两个字符之间并不能防止在对齐中增加字母间距

可以通过以下方式轻松证明:

var div = document.createElement('div');
div.innerHTML = '&#8203;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 );  // "&#8203;xXx"

为了获得更好的解决方案,您可以查看可以处理所有HTML特殊字符的this answer