replace  从JavaScript DOM文本节点

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

结果string有时包含一个不间断的空间实体。 我如何用普通的空格字符replace它?

我的div看起来像这样…

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

以下在networking上发现的build议无效:

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

有什么build议么?

这比你做得容易得多。 文本节点不会有文字string"&nbsp;" 在它里面,它会有代码160的相应字符。

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

UPDATE

更简单:

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

如果您只需要更换&nbsp; 那么你可以使用一个更简单的正则expression式:

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

另外,你的div例子中有一个错字,它说&nnbsp; 而不是&nbsp;

想当你用“ 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); 

编辑 :另外,只有在第一次声明一个variables(在cleanTextvariables上使用它两次)时才使用“ var ”。

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

我用这个,它的工作:

 var cleanText = text.replace(/&amp;nbsp;/g,""); 
 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]; }) ); }; 

试试这个…..这对我有效

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

 var cleanText = text.replace(/\xA0/g,' '); 

这应该是你需要的一切。

删除&和之间的所有内容 所有这些符号都有。 如果你想摆脱他们。

 text.replace(/&.*;/g,'');