更换  来自javascript dom文本节点

use*_*678 56 javascript regex html-entities

我正在使用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];
    }) );
  }
})();
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Tim*_*own 116

这比你制作它容易得多.文本节点中不包含文字字符串"&nbsp;",它将具有代码为160的相应字符.

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

textNode.nodeValue = replaceNbsps(textNode.nodeValue);
Run Code Online (Sandbox Code Playgroud)

UPDATE

更简单:

textNode.nodeValue = textNode.nodeValue.replace(/\u00a0/g, " ");
Run Code Online (Sandbox Code Playgroud)


bob*_*mcr 25

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

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

另外,你的div例子中有一个拼写错误,它&nnbsp;代替的是&nbsp;.


bri*_*ary 8

第一行很混乱。它只需要是:

var cleanText = text.replace(/\xA0/g,' ');
Run Code Online (Sandbox Code Playgroud)

那应该是您所需要的。


Kip*_*Kip 6

认为当您使用" var foo = function() {...};" 定义函数时,该函数仅该行之后定义.换句话说,试试这个:

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];
    }) );
  }
})();

var cleanText = text.replace(/^\xa0*([^\xa0]*)\xa0*$/g,"");
cleanText = replaceHtmlEntities(text);
Run Code Online (Sandbox Code Playgroud)

编辑:此外,仅var在您第一次声明变量时使用" "(您在变量上使用它两次cleanText).

编辑2:问题是函数名称的拼写.你有"var replaceHtml Entites =".它应该是"var replaceHtml Entit i es ="


moh*_*ida 6

我用过这个,它有效:

var cleanText = text.replace(/&amp;nbsp;/g,"");
Run Code Online (Sandbox Code Playgroud)


Ami*_*rma 5

var text = "&quot;&nbsp;&amp;&lt;&gt;";
text = text.replaceHtmlEntites();

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

试试这个……这对我有用