【问题标题】:Loading with AJAX and going to anchor in loaded content使用 AJAX 加载并锚定加载的内容
【发布时间】:2010-10-31 06:43:52
【问题描述】:

我正在建立一个网站来组织漫画收藏。

所以你在左边有一个你的漫画列表,如果你点击其中一个,带有该漫画详细信息的页面会在右边加载带有 jQ​​uery load() 函数的 AJAX。

我没有为每一个漫画设置一个页面,而是为每个系列(一个用于所有“行尸走肉”,一个用于所有“蜘蛛侠”....),所以每个页面都可以有很多不同漫画。

但是,当点击特定漫画时,我不仅想加载正确的页面,还想进入该页面中的正确位置。

我在每一页都有锚点(#i12,#i13 每次都有唯一的编号)。

如何在使用 AJAX 加载内容后,转到正确的锚点?我尝试动态修改页面 URL(在末尾添加 #i12)但没有成功。

我用的是document.location.hash,坏主意?


一个非常简单的例子:点击链接时,页面被加载到 div 中,我希望页面滚动到锚点#i120

主页:

<div id="list">
<a href="test.php#i120">Go to num 120</a>
</div>
<div id="content">

</div>

Javascript:

$("a").live('click',function (event)
{
    $("#Content").load(this.href);

    event.stopImmediatePropagation();
    event.preventDefault();
});

页面测试.php:

<div id="i1">Text1</div>
...
...
<div id="i120">Text120</div>

【问题讨论】:

  • 你能发布你正在使用的 jQuery 吗?以及您的 html 的代表性摘录?
  • 发布了极其简化的代码。
  • 在这种情况下,我倾向于同意下面的@tandu

标签: jquery ajax anchor


【解决方案1】:

首先,让我们摆脱无效的 ID,它们在 HTML5 之前不能以数字开头,我会在你的 ID 前加上 id="nav1" 之类的前缀。

那部分是清理,你可以为滚动做的是:

$("a").live('click', function(event) {
    var hash = this.hash;
    $("#Content").load(this.href, function() {
      document.location.hash = hash;
    });
    event.stopImmediatePropagation();
    event.preventDefault();
});

一旦加载内容,它就会运行,所以有一些东西可以滚动到。这种方法会立即生效,因此要对其进行动画处理……这也很简单:

$("a").live('click', function(event) {
    var hash = this.hash;
    $("#Content").load(this.href, function() {
      var st = $(hash).scrollTop();
      $('html, body').animate({ scrollTop: st }, 200); //200ms duration
    });
    event.stopImmediatePropagation();
    event.preventDefault();
});

我们将this.hash 存储为一个变量,因为在该回调中,this 将引用#Content 元素,而不是我们单击的锚点。

【讨论】:

  • 谢谢。已更正无效 ID。在实践中它不是无效的(即:#comic120),但我在问题中过度简化了它......
【解决方案2】:

Jquery ScrollTo 可能是你最好的选择。

否则,我建议在页面上添加一些不可见的链接(例如 ),然后在 ajax 完成并且您拥有运行的 id # 之后:

$("#link" + idnumber).click();

简单,但非常有效。

【讨论】:

  • 谢谢。我一直在寻找不使用任何外部脚本的东西,但我会看看它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多