web-dev-qa-db-ja.com

nbspの置き換え。 javascript domテキストノードから

JavaScriptを使用してxhtmlを処理しています。 nodeType == Node.TEXT_NODEであるすべての子ノードのnodeValueを連結して、divノードのテキストコンテンツを取得しています。

結果の文字列には、改行しないスペースエンティティが含まれることがあります。これを通常のスペース文字に置き換えるにはどうすればよいですか?

私のdivはこのように見えます...

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

Webで見つかった次の提案は機能しませんでした。

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

助言がありますか?

54
user158678

これは、作成するよりもはるかに簡単です。テキストノードにはリテラル文字列"&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, " ");
113
Tim Down

_&nbsp;_のみを置き換える必要がある場合は、はるかに単純な正規表現を使用できます。

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

また、divの例にはタイプミスがあり、_&nnbsp;_ではなく_&nbsp;_と表示されます。

24
bobbymcr

その最初の行はかなりめちゃくちゃです。次のことだけが必要です。

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

必要なのはこれだけです。

7
brianary

Ithinkvar foo = function() {...};」で関数を定義すると、その関数は定義されるだけです afterその行。言い換えれば、これを試してください:

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);

編集:また、変数を最初に宣言するときにのみ「var」を使用します(cleanText変数で2回使用します)。

編集2:問題は、関数名のスペルです。 「var replaceHtml権力 = "。" var replaceHtmlである必要がありますエンティットes = "

6
Kip

私はこれを使用し、それは働いた:

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

これを試してください.....これは私のために働いた

4
Amit Sharma

&;の間のすべてのシンボルを削除します。あなたがそれらを取り除きたい場合は。

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

私にとっては置き換えが機能しません...このコードを試してください:

str = str.split("&quot;").join('"');
0