【问题标题】:An odd DOM cache/refreshing issue with LI items and jQueryLI 项和 jQuery 的奇怪 DOM 缓存/刷新问题
【发布时间】:2012-10-30 05:58:21
【问题描述】:

我有一个动态注入的<li> 项目,第一个项目被标记为“.current”类。我在 DOM 中也有“下一个”按钮,它从列表中带有“.current”类的项目加载下一个项目。但是,当我动态重新填充列表时,“下一步”按钮将加载列表中的所有其他项目。如果我再次重新填充列表,下一个按钮将加载列表中的每 3 个项目。 List 通过 $.ajax 填充,是一个 json 数据类型。每次我重新填充时,我都会删除所有列表项,如下所示:

 $('#playlist').children().remove();

下一个按钮查找下一项如下:

 $('#playlist ul').find(".current").nextAll().first().children('a');

关于为什么加载列表中的“下一项”会出现不一致的任何想法/建议?显然,这也与重新填充列表有关。我正在设置"cache":false 在填充列表的 $.ajax 调用中......

当这种不一致发生时,下一个项目似乎是从先前加载的列表中的项目(类“.current”)开始的。

小提琴:http://jsfiddle.net/unA6h/7/(不是我拥有的完整代码,而是让我头疼的部分;列表从 ajax call..json 等填充。)

【问题讨论】:

  • 只是一个简单的问题...您为什么使用.nextAll().first() 而不是.next()?他们都应该做同样的事情。
  • 你能在小提琴中重现这个问题吗??
  • 或者提供一些 HTML 让我们在小提琴中重新创建它?
  • 以前加载:你的意思是按F5吗?您能否粘贴您的代码以填充列表以及生成的 HTML,以便我们查看发生了什么?需要更多上下文。
  • @FrédéricHamidi 对,但在这种情况下没有选择器。该选择器(我假设缺少)+ html 可能是问题的原因。

标签: jquery caching refresh html-lists


【解决方案1】:

您在没有任何兄弟姐妹的锚标记上调用.nextAll(),因此.nextAll() 没有任何元素。您需要在.nextAll() 之前添加.parent()。我还在下面做了一个小优化,当你已经有了元素时,获取 id 并通过 id 选择没有意义。

var next_item = $('#playlist ul').find('.current').parent().nextAll('li[role="normal_item"]').first().children('a');
setItemAsCurrent(next_item);

http://jsfiddle.net/unA6h/16/

【讨论】:

  • 谢谢@Kevin B 但是,这不是问题...所以如果我现在用不同的数据重新填充列表,“下一步”按钮不会一个接一个地加载项目.每次我重新填充时,它在列表中跳过的项目数量是问题的很多倍......请帮助!我很绝望.. 2 天来一直在尝试解决这个问题
  • 您当前的代码依赖于具有.current 类的元素,您是否将该类放置在您要添加的新标记中需要的位置?
  • 这种任务不应该依赖类或DOM元素吗?我有时想知道最好的做法是用变量注册这类东西......无论如何,我更新了代码,以便它动态加载另一个列表。它可以在小提琴上按我的意愿工作,但在我的原始代码中却没有。不同之处在于我的列表是通过原始代码中的 $ajax 加载的。所以我想知道 $.ajax 中的什么会导致这种行为..
  • 如果您注意到,在下一个函数中会跳过带有 role="not_normal_item" 的 li 项目...在我的原始代码中,它会跳过项目 x 我重新填充列表的次数。如果这有意义..
  • 在事件中添加console.log("worky")。每次点击会发生多少次?
猜你喜欢
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 2013-01-11
  • 2016-08-17
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多