我对一些定制的轮播逻辑有一些问题。
我需要在我的页面上处理两个事件。当用户按下左键时,我希望选择器成为活动选择器的前一个对象。当用户按下右侧时,活动项应位于“活动”项旁边。
这是html
<li><a href='/vaara'><img src="/media/954/150.jpg" alt="blabla"/></a></li>
<li><a href='/vaara'><img src="/media/954/150.jpg" alt="blabla"/></a></li>
<li><a href='/vaara'><img src="/media/954/150.jpg" alt="blabla"/></a></li>
中间的元素代表“活跃”元素。
这是我提出的jquery
var activeitem = $("#carousel_ul li:eq(3) a img", this).attr('alt');
现在我想获得prev()或next()alt文本。像这样的东西
carouselItemLeft.on('click', function () {
var connectedInsurace = activeitem.next();
答案 0 :(得分:1)
eq
从零开始,因此:eq(3)
会选择标记中不存在的第三个li
元素,attr
会返回undefined
。 next
是jQuery对象的方法而不是String对象,在您的代码中会生成ReferenceError
。
答案 1 :(得分:1)
.next()
看着下一个兄弟姐妹。您当前的上下文是一个图像,您想要的“下一个”图像包含在列表项和锚中,因此您需要以下内容:
var next = activeItem.closest("li").next().find("img").attr("alt");
答案 2 :(得分:0)
您应该为变量命名以反映它们的实际含义。 activeitem
不应存储到商品的alt
属性中,而应存储实际商品。
假设当前活动的li
元素有一个名为active
的类。那么您的代码可能如下所示:
carouselItemLeft.on('click', function () {
var $activeitem = $("#carousel_ul li.active"); // the li, not the img
var $connectedInsurace = $activeitem.next();
var alttext = activeitem.find('img').attr('alt');
答案 3 :(得分:0)
您最好实际为活动项目分配data- *标签,而不是使用商品上的索引。
所以:
carouselItemLeft.on('click', function () {
var $connectedInsurace = $('[data-active="true"]');
$connectedInsurace.data("active", false);
$(this).data("active", true);
// Get next item
var $next = $connectedInsurace.next();
});