1. ホーム
  2. javascript

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

2023-07-17 15:27:14

質問

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

何か提案はありますか?

どのように解決するのですか?

これはあなたが考えているよりずっと簡単です。テキストノードにリテラル文字列の "&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, " ");