Remplacer & nbsp; À partir de javascript dom text node

Je suis en train de traiter xhtml en utilisant javascript. Je reçois le contenu du texte pour un nœud div par concaténer le nodeValue de tous les nœuds enfants où nodeType == Node.TEXT_NODE.

La chaîne résultante contient parfois une entité spatiale sans rupture. Comment puis-je le remplacer par un caractère d'espace régulier?

Mon div est comme ça …

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

Les suggestions suivantes trouvées sur le Web ne fonctionnent pas:

 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?

    C'est beaucoup plus facile que vous ne le faites. Le nœud de texte n'aura pas la chaîne littérale "&nbsp;" En elle, il aura le caractère correspondant avec le code 160.

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

    METTRE À JOUR

    Encore plus facile:

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

    Si vous avez seulement besoin de remplacer &nbsp; Alors vous pouvez utiliser un regex beaucoup plus simple:

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

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

    Je pense que lorsque vous définissez une fonction avec " var foo = function() {...}; ", la fonction n'est définie qu'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); 

    Modifier : En outre, utilisez uniquement " var " la première fois que vous déclarez une variable (vous l'utilisez deux fois sur la variable cleanText ).

    Modifier 2 : le problème est l'orthographe du nom de la fonction. Vous avez "var replaceHtml Entites =". Il devrait être "var replaceHtml Entit i es ="

    J'ai utilisé cela, et cela a fonctionné:

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

    Essayez ceci … cela a fonctionné pour moi

    Cette première ligne est assez dérangée. Il ne doit être que:

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

    Cela devrait être tout ce dont vous avez besoin.

    Supprime tout entre & et ; Que tous ces symboles ont. Si vous voulez vouloir vous débarrasser d'eux.

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