jQuery .ajax()html响应。找

时间:2013-08-15 18:23:43

标签: jquery html ajax

我有一个.ajax调用,它通过post请求加载一个url,就像.load()一样。我正在阅读responseText以获取有效的HTML。然后我想抓住我自己的#content id。

标题用于替换页面标题。 #content是要在页面上替换的内容,我需要class属性的body标记,因为它们是我想要加载的每个页面的特定类。

    $.ajax({
    url: url,
    type: 'POST',
    data: {},
    complete: function (result) {

        var html = $('<div>' + result.responseText + '</div>'),
            title = html.filter('title:first').text(),
            b = html.find('body'),
            inner = html.find('#content').html();

        console.log(b);

        //change document title
        document.title = title;

        //add new content
        wrap.html(inner);

        //for home page
        $(window).trigger('resize');

        //fade in
        wrap.fadeIn(500, function () {

            wrap.trigger('newpage');
            $('#wrap').css('min-height', '100%');

        });

    }
});

假设已定义换行。请。这里的问题是,我无法检索正文以便阅读课程。它总是返回undefined。我也尝试使用.filter()而不是.find(),但没有运气。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

每个文档只能有一个<body>标记,通常浏览器会将这些标记从html中删除。

您只需在Chrome调试器中输入以下内容即可对其进行测试:

$('<div><head></head><body>Example Text</body></div>');

将返回:

[<div>Example Text</div>]

JQuery API

中记录了这一点
  

传递复杂的HTML时,某些浏览器可能无法生成完全复制所提供的HTML源的DOM。如上所述,jQuery使用浏览器的.innerHTML属性来解析传递的HTML并将其插入到当前文档中。在此过程中,某些浏览器会过滤掉某些元素,例如<html><title><head>元素。因此,插入的元素可能无法代表传递的原始字符串。

答案 1 :(得分:0)

您可以尝试在体内使用内部元素。这是我的策略。我在body中创建了一个 phantom div,并在ajax调用中调用它。

希望它适合你。