Development Tip

자바 스크립트 DOM 텍스트 노드에서 교체

yourdevel 2021. 1. 9. 11:02
반응형

자바 스크립트 DOM 텍스트 노드에서 교체


javascript를 사용하여 xhtml을 처리하고 있습니다. nodeType == Node.TEXT_NODE 인 모든 자식 노드의 nodeValue를 연결하여 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, " ");

교체 만 필요하다면 &nbsp;훨씬 더 간단한 정규식을 사용할 수 있습니다.

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

또한 div 예제에 오타가 있습니다 . &nnbsp;대신 &nbsp;.


That first line is pretty messed up. It only needs to be:

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

That should be all you need.


I think when you define a function with "var foo = function() {...};", the function is only defined after that line. In other words, try this:

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

Edit: Also, only use "var" the first time you declare a variable (you're using it twice on the cleanText variable).

Edit 2: The problem is the spelling of the function name. You have "var replaceHtmlEntites =". It should be "var replaceHtmlEntities ="


i used this, and it worked:

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

try this.....this worked for me


Removes everything between & and ; which all such symbols have. if you juts want to get rid of them.

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

for me replace doesn't work... try this code:

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

ReferenceURL : https://stackoverflow.com/questions/1495822/replacing-nbsp-from-javascript-dom-text-node

반응형