【发布时间】:2013-12-12 13:03:05
【问题描述】:
我正在制作一种进度条/导航元素,显示您当前所在的页面和您访问过的页面。有一个额外的功能可以改变您已经访问过的页面的颜色,但这实际上比您当前的页面“更远”(例如:您已阅读前 16 页,您导航回至后 8 页,第 9 页到第 16 页显示不同的颜色)。
如果您只是向前和向后导航而不跳过,我的实现工作正常。当您跳到一个页面时,问题就开始了。当您从那里向后导航时,即使应该应用附加类visited_page_gt_current 也不会应用。当您一页一页地向后导航时,以前未更改颜色的页面会在某个时间点更改为正确的颜色(一次多个)。
更改类的代码:
// remove current page and visited_page_gt_current from all the visited ones to be sure
$(".visited_page").removeClass("current_page visited_page_gt_current");
// add current page and visited page classes to the current element
$("#pbar_elem"+i).addClass("current_page visited_page");
//add visited_page_gt_current to all visited pages that are "further" than the current page
$(".visited_page").slice(i-1, 15).addClass("visited_page_gt_current");
我做了一个简化的 JSFiddle 来演示这个问题:http://jsfiddle.net/eQY3h/30/
我尝试过的事情:
使用不同的方法来获取 div 我需要更改颜色:切片、使用 :gt()-选择器、获取 ID 并使用 first() & :not('.visited_page') 来获取第一个未访问页面之后的 .visited_pages div。
以上所有方法都以类似的方式工作,但在跳过后都失败:选择器在跳过后只给出空结果,直到某个点到来,它们再次给出正确的 ID
【问题讨论】:
-
问题出在切片方法的应用上。您只选择在 $(".visited_pages") 之前访问过的元素,然后在位置 i-1 处切片,但结果集中的元素少于 15 个..
-
如果我错了,请纠正我,但
$(".visited_page").slice(i-1, 15).addClass("visited_page_gt_current");只会处理具有“visited_page”类的项目,而未点击的项目则不会
标签: javascript jquery html css dom