2017-07-06 88 views
0

我使用ajax通过替换main标记中的内容来加载我的网站页面。 问题是,使用Wordpress,每个页面都有自己的body类,这些类对于样式目的很有用,所以我想用下一页的类替换旧页面的正文类。

我想我会运行一个新的ajax请求来获取整个html页面,然后检查body元素,然后使用.attr("class")获取类的列表,最后用新的类替换旧的body类。

但类总是返回undefined而不是类的列表。

编辑:我试图用.cd-main-content而不是身体和它奇怪的工作,我得到这个元素的类。所以我现在假设问题不是来自我的语法,而是来自元素本身。
我怎样才能得到它在body元素上工作? (我已经尝试过以取代.filter.find,但它也不行)jQuery - 如何从ajax请求获取元素的类

HTML stucture

<body id="body" class="home page-id-number other-classes"> 
    <main> 
     <div class="cd-main-content"> 
      <!-- inside is the dynamically loaded content--> 
     </div> 
    </main> 
</body> 

jQuery的

$.ajax({url: url, 
    success: function(data){ 
     var body = $(data).find("#body"); 
     var classes = body.attr("class"); 
     console.log(data); //returns the html as expected 
     console.log("body : "+body); //returns [object Object] 
     console.log("classes : "+classes); //returns undefined 
    } 
}); 

回答

1

“身体” 标签筛选的jQuery从字符串时获得。

所以$(data)[0]会返回所有内容,没有body。

还可以使用过滤器,而不是“发现” 所以,你可以得到的类这样的:

$.ajax({url: url, 
    success: function(data){ 
     //replace body tag 
     data = data.replace("<body", "<container").replace("body>", "container>"); 
     var classes = $(data).filter("container").attr("class"); 
     $("body").attr("class", classes); 
    } 
}); 
+0

哦,更换车身标签是个好主意。 我其实更喜欢你的解决方案,因为它不需要修改html。谢谢 ! –

1

jQuery代码是错误的:

$.ajax({url: url, 
    success: function(data){ 
     var body = $(data).find("body"); //not #body 
     var classes = body.attr("class"); 
     console.log(data); //returns the html as expected 
     console.log("body : "+body); //returns [object Object] 
     console.log("classes : "+classes); //returns undefined 
    } 
}); 

正确的选择是body#body,这是一个ID选择

因此,改变你的身体类使用此代码:

$.ajax({url: url, 
    success: function(data){ 
     var classes = $(data).find("body").attr("class"); //get the classes 
     $("body").attr("class", classes); //set the classes 
    } 
}); 

jQuery Selectors

+0

对不起,我编辑我的代码,以避免混乱。我的身体确实有一个身体的id,所以这不是问题的来源。 感谢提示设置类! –

0

我找到了一个解决方案,它的效果并不理想但它解决了这个问题。

首先,我必须假设它不可能获得body元素的属性,因为它似乎被jQuery过滤。但是可以获取子元素。

我最后将body body添加到了bodymain元素(在wordpress的header.php文件中)。

这里是我现在的代码:

HTML

<body id="body" class="home page-id-number other-classes"> 
    <main class="home page-id-number other-classes"> 
    <!-- if I had the possibility, I'd have added "data-body-class" instead of "class" --> 
     <div class="cd-main-content"> 
      <!-- inside is the dynamically loaded content--> 
     </div> 
    </main> 
</body> 

jQuery的

$.ajax({url: url, 
    success: function(data){ 
     var classes = $(data).filter("main").attr("class"); //get the classes 
     $("body, main").attr("class", classes); //set the classes 
    } 
});