2014-11-21 67 views
1

我有一个变量一个javascript节点,如果我是可变登录到控制台,我得到这样的:在一个javascript节点获取JavaScript节点原始内容

"​asekuhfas eo" 

只是一些随机字符串。我想从字面上理解为一个字符串。但问题是,当我使用它textContent,我得到这个:

​asekuhfas eo 

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

​asekuhfas eo 

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

如何将该节点对象作为字符串LITERALLY出现?

+0

Offtopic:它被称为 “DOM节点”。 – hon2a 2014-11-21 15:24:08

+0

您是否阅读过标签“raw”的描述? – 2014-11-21 15:24:48

+0

@ hon2a好吧,我的意思是一个DOM节点,在javascript中,似乎是多余的澄清。 – 2014-11-21 15:26:42

回答

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]; 
} 
+0

奇妙!工作就像一个魅力:)好想法。 – 2014-11-21 15:40:05

+0

考虑到我只对这一个特定的char代码感兴趣,这特别有用。所以我可以用if(a.charCodeAt(i)== 8203)替换'if(a.charCodeAt(i)> 1000)'' – 2014-11-21 15:41:02

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 

his answer提到Eugen Timm它是一个有点棘手将UTF字符转换回HTML实体,并且他的解决方案对于字符代码高于1000的非标准字符完全有效。作为一种替代我可以提出一个更短的正则表达式的解决方案,这将给予同样的结果:

var result = div.textContent.replace(/./g, function(x) { 
    var code = x.charCodeAt(0); 
    return code > 1e3 ? '&#' + code + ';' : x; 
}); 

console.log(result); // "&#8203;xXx" 

对于一个更好的解决方案,你可以看看this answer它可以处理所有的HTML特殊字符。

+0

不知道这回答OP的问题:'我怎样才能得到该节点对象是一个字符串LITERALLY,因为它显示?OP想要获取字符串,因为它出现在HTML中。 (即'​'位 – sircapsalot 2014-11-21 15:19:15

+0

对,我明白了,所以我想知道是否可以得到该DOM节点,因为它实际上以某种其他方式出现?某种数字或原始的unicode编码方法,我不是知道也许? – 2014-11-21 15:19:26