2

我有一个 .ajax 调用,它通过发布请求加载一个 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%');

        });

    }
});

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

有任何想法吗?

4

2 回答 2

2

每个文档只能有一个<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>元素。因此,插入的元素可能不能代表传递的原始字符串。

于 2013-08-15T18:37:40.327 回答
0

您可以尝试在正文中使用内部元素。这就是我的策略。我在体内创建了一个幻像div 并在 ajax 调用中调用它。

希望对你有效。

于 2014-02-27T21:16:33.217 回答