Замена из javascript dom text node
Я обрабатываю xhtml с помощью javascript. Я получаю текстовое содержимое для div node путем объединения nodeValue всех дочерних узлов, где nodeType == Node.TEXT_NODE.
Результирующая строка иногда содержит неразрывную космическую сущность. Как заменить это на обычный символ пробела?
Мой div выглядит так...
<div><b>Expires On</b> Sep 30, 2009 06:30 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];
}) );
}
})();
Любые предложения?
Ответы
Ответ 1
Это намного проще, чем вы это делаете. Текст node не будет иметь в нем буквенную строку " "
, он будет иметь соответствующий символ с кодом 160.
function replaceNbsps(str) {
var re = new RegExp(String.fromCharCode(160), "g");
return str.replace(re, " ");
}
textNode.nodeValue = replaceNbsps(textNode.nodeValue);
UPDATE
Еще проще:
textNode.nodeValue = textNode.nodeValue.replace(/\u00a0/g, " ");
Ответ 2
Если вам нужно заменить
, вы можете использовать гораздо более простое регулярное выражение:
var textWithNBSpaceReplaced = originalText.replace(/ /g, ' ');
Кроме того, в вашем примере div есть опечатка, он говорит &nnbsp;
вместо
.
Ответ 3
Я думаю, что когда вы определяете функцию с "var foo = function() {...};
", функция определяется только после этой строки. Другими словами, попробуйте следующее:
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);
Изменить. Также используйте только "var
" при первом объявлении переменной (вы используете ее дважды в переменной cleanText
).
Изменить 2. Проблема заключается в написании имени функции. У вас есть "var replaceHtml Entites =". Он должен быть "var replaceHtml Entit i es ="
Ответ 4
Я использовал это, и он работал:
var cleanText = text.replace(/&nbsp;/g,"");
Ответ 5
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];
}) );
};
попробуй это..... это сработало для меня
Ответ 6
Эта первая строка довольно перепутана. Это должно быть только:
var cleanText = text.replace(/\xA0/g,' ');
Это должно быть все, что вам нужно.
Ответ 7
Удаляет все между &
и ;
, которые есть у всех таких символов. если вы дерьмо хотите избавиться от них.
text.replace(/&.*;/g,'');