我正在与一个持久的音乐播放器阿贾克斯-一个WordPress主题的过程。Wordpress在<body>标记上使用动态类。基本结构如下:
<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
发布于 2014-03-11 21:50:52
我的典型解决方案应该是告诉您将AJAX代码放入一个jQuery对象中,然后像往常一样读取它:
$(ajaxResult).attr('class');有趣的是,似乎不能用<body>元素来完成这个任务。
我想说的是,最简单的解决方案(如果您能够控制最终的HTML)就是使用一些好的ol‘regex:
var matches = ajaxResult.match(/<body.*class=["']([^"']*)["'].*>/),
classes = matches && matches[1];我说“如果您控制了最终的HTML",因为这取决于HTML的格式是否合理。
另一种方法是将其解析为一个DOMDocument,然后提取所需的内容,但这需要花费更多的时间,而且在这种简单的情况下通常会造成太大的损失。
发布于 2014-03-11 22:00:37
将返回的html中的主体转换为具有特定ID的div,然后以该id为目标获取主体的类(现在是div)。
modifiedAjaxResult = ajaxResult.replace(/<body/i,'<div id="re_body"')
.replace(/<\/body/i,'</div');
$(modifiedAjaxResult).filter("#re_body").attr("class");当然,如果身体有一个id,这将与它冲突,因此任意数据属性可能不太可能中断。
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。
$.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") );
});https://stackoverflow.com/questions/22337216
复制相似问题