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 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 " "
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
Alors vous pouvez utiliser un regex beaucoup plus simple:
var textWithNBSpaceReplaced = originalText.replace(/ /g, ' ');
En outre, il existe une faute de frappe dans votre exemple div, il dit &nnbsp;
Au lieu de
.
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(/&nbsp;/g,"");
var text = "" &<>"; 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,'');