Извлечение текста из тела Ajaxed с помощью jquery - PullRequest
1 голос
/ 01 ноября 2010

Я пытаюсь извлечь текст из тела, загруженного через ajax.

Я не могу добавить это новое тело в iframe или в один из моих элементов, потому что скрипты внутри могут сломать мою страницу.

Я надеялся, что вилка для меня будет:

$.ajax({ type: "GET",
  dataType: "text", /* this will avoid evaluating scripts */
  url: href,
  success: function (data) {
    var body = data.split('<body').pop().split('</body>')[0];
    if (body) {
      body = '<body' + body + '</body>';
      var pageText = $(body).find("style").remove().end()
          .find("script").remove().end()
          .find("noscript").remove().end()
          .text().replace(/\s{2,}/gi, " ").toLowerCase();
      if (pageText.length > 0)
          console.log(pageText);
});

Я попытался поместить загруженное тело в элемент DIV, поскольку jQuery игнорирует BODY, заменяя find.remove на detach, но без особого успеха.

Есть ли стандартное решение?

Спасибо

Ответы [ 2 ]

1 голос
/ 01 ноября 2010

jQuery.load () делает все за вас (удаляет сценарии и, при необходимости, захватывает только нужный фрагмент).

Например,

$('#result').load('ajax/test.html #container');

Загружает содержимоеэлемент с идентификатором container из URL ajax/test.html в элемент (на текущей странице) с идентификатором result.

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

jQuery не игнорирует тело, см. здесь .

это не работает?

$.ajax({ type: "GET",
  dataType: "text", /* this will avoid evaluating scripts */
  url: href,
  success: function (data) {
    var $data = $(data);
    var newHTML = $("body", $data).html();
    $("body").html(newHTML);  
  }
});
...