Подтвердить что ты не робот

Замена из javascript dom text node

Я обрабатываю xhtml с помощью javascript. Я получаю текстовое содержимое для div node путем объединения nodeValue всех дочерних узлов, где nodeType == Node.TEXT_NODE.

Результирующая строка иногда содержит неразрывную космическую сущность. Как заменить это на обычный символ пробела?

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

Любые предложения?

4b9b3361

Ответ 1

Это намного проще, чем вы это делаете. Текст node не будет иметь в нем буквенную строку "&nbsp;", он будет иметь соответствующий символ с кодом 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

Если вам нужно заменить &nbsp;, вы можете использовать гораздо более простое регулярное выражение:

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

Кроме того, в вашем примере div есть опечатка, он говорит &nnbsp; вместо &nbsp;.

Ответ 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(/&amp;nbsp;/g,"");

Ответ 5

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

попробуй это..... это сработало для меня

Ответ 6

Эта первая строка довольно перепутана. Это должно быть только:

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

Это должно быть все, что вам нужно.

Ответ 7

Удаляет все между & и ;, которые есть у всех таких символов. если вы дерьмо хотите избавиться от них.

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