从$ .get()对象获取“class”attr

时间:2011-02-23 21:59:20

标签: jquery

我需要从$ .get()检索的页面对象的body元素中获取class属性。在我的下面的例子中,fullContent设置为对象但我无法选择body元素...我宁愿不采用文本操作来获取此

$.get(url, refreshFullContent);

var refreshFullContent = function(response, status, xhr)
{
    fullContent = response;   
    var bodyclass = $(fullContent).find("body").attr("class");
    $("body").attr("class", bodyclass);
}

有没有办法在对象上使用选择器(就像我在这个例子中尝试做的那样)?如果没有,从文本中获取此信息的最佳方法是什么? xhr.responseText包含整个响应的字符串。

4 个答案:

答案 0 :(得分:3)

这是从$.get获取身体类的解决方案。

$.get(url, refreshFullContent);
var refreshFullContent = function(response, status, xhr)
{
    $("body").attr("class", /body([^>]*)class=(["']+)([^"']*)(["']+)/gi.exec(response.substring(response.indexOf("<body"), response.indexOf("</body>") + 7))[3]);
}

答案 1 :(得分:2)

如果您获得完整的HTML文档回复,则不会在浏览器之间获得一致的行为。

有些浏览器会删除headbody元素。

你可以试试这个,但不能保证:

var fullContent = '<div>' + response + '</div>';
var bodyclass = $(fullContent).find("body").attr("class");
$("body").attr("class", bodyclass);

答案 2 :(得分:2)

我尝试了user113716的解决方案,但不幸的是,身体类总是未定义的。但这个解决方案对我有用:

$("body").attr("class", data.match(/body class=\"(.*?)\"/)[1]);

虽然数据是我的ajax响应,并且正文必须如下所示:

<body class="classname...">

意味着在body元素出现class属性之后(或者你必须重写正则表达式)。

答案 3 :(得分:1)

$("a").click(function (e) {
    e.preventDefault();

    $.get(this.pathname, function(response) {
        var $dom = $(document.createElement("html"));
        $dom[0].innerHTML = response; // Here's where the "magic" happens

        var $body = $(dom).find("body");
        // Now you can access $body as jquery-object
        // $body.attr("class");

    });
});