3

我正在为 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');
    }
});
4

2 回答 2

1

考虑到 .text() 只会检索包含在 html 标记中的“文本”,请查看jQuery 文档。我认为您真正想要的是使用 .html() 方法

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

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

更新

显然,所有浏览器在创建 DOM 对象时都会删除不在“正文”内的任何内容。问题是当你这样做时: "$(data)" jQuery 使用 "data" 变量的内容创建一个 DOM 对象,并且你的浏览器决定忽略所有不在 "body" 标记内的元素,因此在jQuery 处理“head”元素的内部 DOM 对象不再存在。所以你必须找到一个解决方法。

试试这个,将这些代码行放在“成功:函数(数据){”行之后:

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());
于 2012-11-22T23:16:08.470 回答
0

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

$("head").html('NEW STUFF IN HEAD');
于 2012-11-22T22:28:38.030 回答