web-dev-qa-db-fra.com

Remplacement & nbsp; depuis un noeud de texte javascript dom

Je traite xhtml en utilisant javascript. Je reçois le contenu du texte d'un nœud div en concaténant la valeur nodeValue de tous les nœuds enfants où nodeType == Node.TEXT_NODE.

La chaîne résultante contient parfois une entité d'espace insécable. Comment puis-je remplacer ceci par un caractère d'espace normal?

Mon div ressemble à ça ...

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

Les suggestions suivantes trouvées sur le Web n'ont pas fonctionné:

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

Aucune suggestion?

49
user158678

C'est beaucoup plus facile que vous ne le faites. Le nœud de texte ne contiendra pas la chaîne littérale "&nbsp;", mais le code 160 correspondant.

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

textNode.nodeValue = replaceNbsps(textNode.nodeValue);

METTRE &AGRAVE; JOUR

Encore plus facile:

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

Si vous devez seulement remplacer &nbsp;, vous pouvez utiliser une expression rationnelle beaucoup plus simple:

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

En outre, il existe une faute de frappe dans votre exemple div: &nnbsp; au lieu de &nbsp;.

23
bobbymcr

Je pense lorsque vous définissez une fonction avec "var foo = function() {...};", la fonction n'est définie que après cette ligne. En d'autres termes, essayez ceci:

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 : De plus, utilisez uniquement "var" la première fois que vous déclarez une variable (vous l'utilisez deux fois sur la variable cleanText).

Edit 2 : Le problème est l'orthographe du nom de la fonction. Vous avez "var replaceHtmlEntités = ". Il devrait être" var replaceHtmlEntitjees = "

5
Kip

je l'ai utilisé, et cela a fonctionné:

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

essayez ceci ..... cela a fonctionné pour moi

4
Amit Sharma

Cette première ligne est assez foirée. Il suffit que ce soit:

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

Cela devrait être tout ce dont vous avez besoin.

4
brianary

Supprime tout ce qui existe entre & et ; que tous ces symboles ont. si vous voulez vous en débarrasser. 

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

pour moi, le remplacement ne fonctionne pas ... Essayez le code suivant:

str = str.split("&quot;").join('"');
0
לבני מלכה