Почему получение html из NOSCRIPT возвращает htmlentities? - PullRequest
4 голосов
/ 06 мая 2009

Учитывая код:

<noscript><div>FOO</div></noscript>

Запуск

$('noscript').html();

возвращает &lt;div&gt;FOO&lt;/div&gt;

но работает

$('noscript').text();

возвращает необработанный HTML.

Это противоположно тому, что я ожидал. Есть ли объяснение этому?

Ответы [ 3 ]

6 голосов
/ 05 февраля 2013

Кажется, есть ошибка PhantomJS, которая, по-видимому, скрывает сущности в тегах noscript в page.content. Эта функция вернет их в их законную форму. S объект взят из строкового пакета, доступного на npmjs.org.

function fixNoScript(content) {
  var noscript = /<\s*noscript\s*>([^<]+)<\s*\/\s*noscript\s*>/ig;
  var matches = content.match(noscript);
  for ( var i = 0; match && i < matches.length; i++ ) {
    var decoded = S(matches[i]).decodeHTMLEntities().s;
    var index = content.indexOf(matches[i]);
    content = content.substring(0, index) + 
              decoded +
              content.substring(index + matches[i].length);

  }
  return content;
}
4 голосов
/ 06 мая 2009

Это больше причуды DOM, чем причуды jQuery:

$("<noscript><div>FOO</div></noscript>")[0].innerHTML == "&lt;div&gt;FOO&lt;/div&gt;"

$("<noscript><div>FOO</div></noscript>")[0].textContent == "<div>FOO</div>"

По сути, поведение для этого действия не согласовано, как объясняет этот ответ .

0 голосов
/ 26 ноября 2010

Да, это совершенно несовместимо, так как множество разрушено. & copy всегда преобразуется в символ авторского права в ОБА функции. По сути, должна существовать функция, которая просто извлекает html как есть, без каких-либо преобразований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...