我需要从$ .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包含整个响应的字符串。
答案 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文档回复,则不会在浏览器之间获得一致的行为。
有些浏览器会删除head
和body
元素。
你可以试试这个,但不能保证:
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");
});
});