获取和设置页面标题的jQuery .load(或$ .ajax)?

Les*_*eOA 7 javascript ajax jquery

至今...

$('#container').load(hash + ' #page','', function() { 
    $('#container').fadeIn('fast');
    document.title = $('#title').load(hash + ' #title').text();
    });
Run Code Online (Sandbox Code Playgroud)

......不起作用.有没有更好/正确的方法来做到这一点?

仅供参考: -

  • 我添加了ID #title标签(所有页面/它都是PHP模板).
  • 容器是.fade(ed)预先输出(不太重要)

提前致谢.

Nik*_*rez 9

问题在于,在您分配时document.title,$('#title').load(hash + ' #title').text()可能尚未完成.尝试document.title在回调中设置新的.load.

UPDATE

尝试:

$('#container').load(hash + ' #page','', function() { 
    $('#container').fadeIn('fast');
    $('#title').load(hash + ' #title', '', function(data) {
        document.title = $(this).text();
        });
    });
Run Code Online (Sandbox Code Playgroud)

  • 不需要隐藏的div(如果有多个并发请求,这可能是不可靠的),只需使用`jQuery.get()`.在`success`方法中,你可以用`jQuery()`包装`data`参数,并使用`find()`方法从单个响应中提取任意元素.http://api.jquery.com/jQuery.get/ (2认同)

Mis*_*lin 6

我有同样的要求,在ajax加载后更新页面的标题,这就是我使用的 - 一个请求,不需要在HTML中设置特殊属性:

var contentWrap = $('#content-wrap'),
    contentId = '#content';

$.ajax({
  url: hash.replace(/^#!\//, '') + '.html',
  success: function(text) {
    var oldContent = contentWrap.find(contentId),
        newPage = $(text),
        newContent = newPage.find(contentId);

    oldContent.remove();
    contentWrap.append(newContent);
    // Set New Title
    document.title = newPage.filter('title').text();
  }
});
Run Code Online (Sandbox Code Playgroud)