使用jQuery选择变量中的内容而不是当前DOM中的内容?

Che*_*hev 5 html javascript ajax jquery dom

我有一个使用jQuery的ajax函数,它定义了一个要调用的错误函数.当服务器上发生错误时,此错误函数将运行."jqXHR"中传递的变量之一包含一个名为responseText的属性.我想将此响应文本转储到页面上的div中,但响应文本包含完整格式的HTML文档.有没有办法使用jQuery遍历这个包含HTML的变量,就像我遍历常规DOM一样?

$.ajax({
    blah blah blah...,
    error: function (jqXHR, textStatus, errorThrown)
    {
        var errorText = $(jqXHR.responseText).find('body').html();
        // The above line does not work. errorText is NULL.
        $('#mainContent').html(errorText);
    }
});
Run Code Online (Sandbox Code Playgroud)

我想做一些像上面的代码片段,但我这样做的方式不起作用.有没有办法遍历这个变量,好像它是一个我可以用jQuery导航的DOM?

UPDATE

这里有一个 console.log($(jqXHR.responseText))

http://www.codetunnel.com/content/images/consolelog.jpg

Ada*_*son 3

这对我来说也是一些甜蜜的发现。

这不起作用,因为在幕后,jQuery 正在创建一个文档片段并在其上设置innerHtml 属性。这不适用于<html>节点<body>,因为它们不是文档节点类型——它们不能放入 DOM 中。

相反,当您调用 时$('<html><body><b>foo</b></body></html>'),会创建一个片段,<b>foo</b>其中仅包含“”!那么,你只想要身体部分吗?只需返回:

$(jqXHR.responseText).html();
Run Code Online (Sandbox Code Playgroud)

小提琴证明我所指的内容: http: //jsfiddle.net/L5PR5/1/


编辑#2

我认为考虑到<head>元素被放入其中,您唯一的选择是使用子字符串:

var res = jqXHR.responseText;
$(res.substring(res.indexOf('<body'))).appendTo('#mainContent');
Run Code Online (Sandbox Code Playgroud)