替换  来自 javascript dom 文本节点

新手上路,请多包涵

我正在使用 javascript 处理 xhtml。我通过连接 nodeType == Node.TEXT_NODE 的所有子节点的 nodeValue 来获取 div 节点的文本内容。

生成的字符串有时包含一个不间断的空格实体。如何用常规空格字符替换它?

我的 div 看起来像这样……

<div><b>Expires On</b> Sep 30, 2009 06:30&nbsp;AM</div>

在网上找到的以下建议没有奏效:

 var cleanText = text.replace(/^\xa0*([^\xa0]*)\xa0*$/g,"");

var cleanText = replaceHtmlEntities(text);

var replaceHtmlEntites = (function() {
  var translate_re = /&(nbsp|amp|quot|lt|gt);/g;
  var translate = {
    "nbsp": " ",
    "amp" : "&",
    "quot": "\"",
    "lt"  : "<",
    "gt"  : ">"
  };
  return function(s) {
    return ( s.replace(translate_re, function(match, entity) {
      return translate[entity];
    }) );
  }
})();

有什么建议么?

原文由 user158678 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 852
2 个回答

这比你做起来容易得多。文本节点中不会包含文字字符串 "&nbsp;" ,它将包含代码为 160 的相应字符。

 function replaceNbsps(str) {
  var re = new RegExp(String.fromCharCode(160), "g");
  return str.replace(re, " ");
}

textNode.nodeValue = replaceNbsps(textNode.nodeValue);

更新

更简单:

 textNode.nodeValue = textNode.nodeValue.replace(/\u00a0/g, " ");

原文由 Tim Down 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果您只需要替换 &nbsp; 那么您可以使用更简单的正则表达式:

var textWithNBSpaceReplaced = originalText.replace(/&nbsp;/g, ' ');

此外,您的 div 示例中有一个拼写错误,它表示 &nnbsp; 而不是 &nbsp;

原文由 bobbymcr 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏