在<head>Jquery/Ajax导航上更新balise Wordpress



我正在为wordpress网站进行ajax导航。我用渐变更新了#content,这没关系,但我只想用我的新页头更新我的头,我找不到!

$(document).ready(function () {
//hash change
$(window).hashchange(function () {
//on retrouve le vrai lien
var arg = window.location.hash.substring(3);
var link = 'http://ladresse.graphsynergie.com/' + arg;

$.ajax({
url: link,
processData: true,
dataType: 'html',
success: function (data) {
data = innerShiv(data, false);
var contenu = $(data).find("#contenu");
//problem part
var head = $(data).find('head').text();
document.head = head;
//problem part end

$('#contenu').fadeOut('200', function () {
$(this).html(contenu.html()).fadeIn('200');
});
}
});
});
//end
//détection d'un hash onload
if (window.location.hash.substring(3) != '') {
$(window).trigger('hashchange');
}
});

考虑到.text()将只检索html标记中包含的"text",请查看jQuery文档。我认为您实际想要的是使用.html()方法。

所以,我认为你可能想用以下代码替换这2行有问题的代码:

$("head").html($(data).find("head").html());

更新

显然,所有浏览器在创建DOM对象时都会去掉"主体"之外的任何内容。问题是,当您执行以下操作时:"$(data)"jQuery创建了一个具有"data"变量内容的DOM对象,并且您的浏览器决定忽略所有不在"body"标记内的元素,因此在jQuery处理的内部DOM对象中,"head"元素不再存在。所以你必须找到一个变通办法。

试试这个,把这几行代码放在"成功:函数(数据){"行之后:

var headIni = data.toLowerCase().indexOf("<head");
var headEnd = data.toLowerCase().indexOf("</head>");
headIni = data.indexOf(">", headIni + 1) + 1;
var headHTML = data.substring(headIni, headEnd);

然后,替换我最初建议的这一行:

$("head").html(headHTML);

这应该可以完成任务。我相信一定有更优雅的方法可以做到这一点,但希望这对你来说已经足够好了。

更新2:

如果你点击这个链接,你会发现一个更好的方法。只需添加你会在那里找到的库"jquery.ba-htmldoc.js",然后这样做:

$("head").html($.htmlDoc(data).find('head').html());

要覆盖"<head>"标签的内容,请使用

$("head").html('NEW STUFF IN HEAD');

最新更新