【问题标题】:Get javascript node raw content获取 javascript 节点原始内容
【发布时间】:2014-11-21 15:08:54
【问题描述】:

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

"​asekuhfas eo"

只是 javascript 节点中的一些随机字符串。我想把它变成一个字符串。但问题是,当我在上面使用textContent 时,我得到了这个:

​asekuhfas eo

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

​asekuhfas eo

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

我怎样才能让那个节点对象在它出现时成为一个字符串?

【问题讨论】:

  • 离题:它被称为“DOM节点”。
  • 你看过标签“raw”的描述吗?
  • @hon2a 嗯,我的意思是一个 DOM 节点,在 javascript 中,似乎是多余的澄清。
  • @Giacomo d'Antonio 天哪,我没有:|
  • 更准确地说,如果您想显示特殊字符,您可能需要查看stackoverflow.com/questions/18749591/… 并编码innerHtml

标签: javascript string object


【解决方案1】:

正如 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];
}

【讨论】:

  • 太棒了!工作就像一个魅力:) 好主意。
  • 考虑到我只对那个特定的字符代码感兴趣,这特别有用。所以我可以用if (a.charCodeAt(i) == 8203)替换if (a.charCodeAt(i) &gt; 1000)
【解决方案2】:

textContent 正确返回所有内容,因为&amp;#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 Timmhis answer中提到的那样,将UTF字符转换回HTML实体有点棘手,他的解决方案对于字符码高于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"

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

【讨论】:

  • 不确定这是否回答了 OP 的问题:How can I get that node object to be a string LITERALLY as it appears? OP 想要获取 html 中出现的字符串。 (即&amp;#8203;
  • 好吧,我明白了。所以我想知道我是否可以得到那个 DOM 节点,因为它实际上以其他方式出现?某种我可能不知道的数字或原始 unicode 编码方法?
猜你喜欢
  • 2010-12-05
  • 2011-09-02
  • 1970-01-01
  • 2012-06-25
  • 2012-10-22
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
相关资源
最近更新 更多