我正在为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');
}
});
答案 0 :(得分:1)
考虑到.text()只会检索html标记中包含的“text”,请查看jQuery documentation.我认为你真正想要的is to use the .html() method。
所以,我认为您可能希望用以下代码替换这两行有问题的代码:
$("head").html($(data).find("head").html());
<强>更新强>:
显然,所有浏览器在创建DOM对象时都会删除“body”中不存在的任何内容。当你这样做:“$(data)”jQuery使用“data”变量的内容创建一个DOM对象,并且你的浏览器决定忽略不在“body”标签内的所有元素,因此在jQuery处理“head”元素的内部DOM对象不再存在。所以你必须找到一个解决方法。
试试这个,把这些代码放在“success:function(data){”:
之后var headIni = data.toLowerCase().indexOf("<head");
var headEnd = data.toLowerCase().indexOf("</head>");
headIni = data.indexOf(">", headIni + 1) + 1;
var headHTML = data.substring(headIni, headEnd);
然后,替换我最初为此建议的行:
$( “头”)的HTML(headHTML);
这应该可以胜任。我确信必须有更优雅的方法来做到这一点,但希望这对你来说已经足够了。
更新2:
如果您关注this link,您会发现一种更好的方法。只需添加您将在那里找到的库“jquery.ba-htmldoc.js”,然后执行以下操作:
$("head").html($.htmlDoc(data).find('head').html());
答案 1 :(得分:0)
覆盖“&lt; head&gt;”的内容标签使用
$("head").html('NEW STUFF IN HEAD');