首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从AJAX-ed页面的body元素中提取所有类,并替换当前页的body类

从AJAX-ed页面的body元素中提取所有类,并替换当前页的body类
EN

Stack Overflow用户
提问于 2014-03-11 21:38:11
回答 2查看 1.2K关注 0票数 0

我正在与一个持久的音乐播放器阿贾克斯-一个WordPress主题的过程。Wordpress在<body>标记上使用动态类。基本结构如下:

代码语言:javascript
复制
<html>
    <head>
    </head>
    <body class="unique-class-1 unique-class-2 unique-class-3">
        <div id="site-container">
            <nav class="nav-primary">
                <a href="/other-page-01/">Other Page 01</a>
                <a href="/other-page-02/">Other Page 02</a>
            </nav>
            <div class="site-inner">
                <p>Site Content Here</p>
            </div>
        </div>
        <div id="music-player"></div>
    </body>
</html>

目前,我正在使用/other-page-01//other-page-02/load('/other-page-01/ #site-container')成功地加载内容。但是,我需要从AJAX加载的页面中提取所有的<body>类,并用它们动态替换当前页面的<body>类。

注意:由于持久的<body>,替换整个<div id="music-player">元素不是一个选项。我试过jQuery.get(),但没能让它起作用。

如何从AJAX请求的页面中提取<body> <body> 类并用它们替换当前页面的<body>类?

我不太熟悉jQuery或Javascript,所以确切的代码会非常有用。任何帮助都是非常感谢的。

谢谢,

Aaron

EN

回答 2

Stack Overflow用户

发布于 2014-03-11 21:50:52

我的典型解决方案应该是告诉您将AJAX代码放入一个jQuery对象中,然后像往常一样读取它:

代码语言:javascript
复制
$(ajaxResult).attr('class');

有趣的是,似乎不能用<body>元素来完成这个任务。

我想说的是,最简单的解决方案(如果您能够控制最终的HTML)就是使用一些好的ol‘regex:

代码语言:javascript
复制
var matches = ajaxResult.match(/<body.*class=["']([^"']*)["'].*>/),
    classes = matches && matches[1];

我说“如果您控制了最终的HTML",因为这取决于HTML的格式是否合理。

另一种方法是将其解析为一个DOMDocument,然后提取所需的内容,但这需要花费更多的时间,而且在这种简单的情况下通常会造成太大的损失。

票数 1
EN

Stack Overflow用户

发布于 2014-03-11 22:00:37

将返回的html中的主体转换为具有特定ID的div,然后以该id为目标获取主体的类(现在是div)。

代码语言:javascript
复制
modifiedAjaxResult = ajaxResult.replace(/<body/i,'<div id="re_body"')
                               .replace(/<\/body/i,'</div');
$(modifiedAjaxResult).filter("#re_body").attr("class");

当然,如果身体有一个id,这将与它冲突,因此任意数据属性可能不太可能中断。

代码语言:javascript
复制
modifiedAjaxResult = ajaxResult.replace(/<body/i,'<div data-re-id="re_body"')
                               .replace(/<\/body/i,'</div');
$(modifiedAjaxResult).filter("[data-re-id=re_body]").attr("class");

http://jsfiddle.net/N68St/

当然,要使用这种方法,您必须转而使用$.get。

代码语言:javascript
复制
$.get("/other-page-01/",function(ajaxResult){
    var modifiedAjaxResult = ajaxResult.replace(/<body/i,'<div data-re-id="re_body"')
                                   .replace(/<\/body/i,'</div');
    alert($(modifiedAjaxResult).filter("[data-re-id=re_body]").attr("class"));
    // the following line replicates what `.load` was doing.
    $(someElement).append( $("<div>").html(ajaxResult).find("#site-container") );
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22337216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档