Запрос HTML возвращается из AJAX - PullRequest
3 голосов
/ 23 марта 2011

Как я могу запросить HTML, возвращенный из AJAX?

Я пробовал

$.post("gethtml.php", { url: $url.val() }, function(data) {
    var $html = $(data),
            $links = $("link, script, style", $html),
            $body = $("body", $html);

    $links.each(function() { $(this).addClass("tmp"); });
    console.log($html);
    console.log($body.html());
});

$html выглядит как [meta, title, script, style#gstyle, script, textarea#csi, div#mngb, iframe, center, script, script] и $body.html() null

ОБНОВЛЕНИЕ

Простая установка на http://jsfiddle.net/uvnrJ/1/

$(function() {
  var html = "<!doctype html><html><head><title>title here ... </title></head><body>This is the body</body></html>",
      $html = $(html);
  console.log($html); // jQuery(title, <TextNode textContent="This is the body">)
  console.log($html.find("body")); // jQuery()
  console.log($html.find("title")); // jQuery()
  console.log($html.filter("title")); // jQuery(title)
});

Показывает, что jQuery, похоже, испытывает проблемы при разборе строки HTML?

Ответы [ 4 ]

3 голосов
/ 14 июня 2013

Попробуйте это ...

..........
var elements = $('<div></div>');
elements.html(data);
alert(elements.find('body').html());
...........
1 голос
/ 23 марта 2011

Я думаю, вам следует искать элементы непосредственно в переменной data или использовать метод find() в $(data).Что-то вроде:

$.post("gethtml.php", { url: $url.val() }, function(data) {
    var $html = $(data).find('html'), // First way
        $links = $("link, script, style", data), // Second way
        $body = $("body", data); // Could be better written as $(data).find('body')

    $links.each(function() { $(this).addClass("tmp"); });
    console.log($html);
    console.log($body.html());
});
0 голосов
/ 02 сентября 2013

Вы можете попробовать это, Это работает

$.ajax({
    'url': url,
    'dataType': 'html',
    'success': function(e){
        var $div = $("<div id='_some_id'>" + e + "</div>");
        $div = $div.filter("_some_id");
        $div.find("span"); // you can search for anything here. it would work now
    }
});
0 голосов
/ 27 ноября 2012

Я столкнулся с той же проблемой и был вынужден прибегнуть к непосредственному анализу строки HTML:

    var headStartIndex = htmlString.toLowerCase().indexOf("<head>") + "<head>".length;
    var headEndIndex = htmlString.toLowerCase().indexOf("</head>");
    var newHead = htmlString.substring(headStartIndex, headEndIndex);

    var bodyStartIndex = htmlString.toLowerCase().indexOf("<body>") + "<body>".length;
    var bodyEndIndex = htmlString.toLowerCase().indexOf("</body>");
    var newBody = htmlString.substring(bodyStartIndex, bodyEndIndex);

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