2013-02-19 62 views
0

我有一些自定義旋轉木馬邏輯的問題。jQuery從圖像裏面獲取next()或prev()屬性alt文本ul li

我需要在我的頁面上處理兩個事件。當用戶按下左鍵時,我希望選擇器成爲活動對象的上一個對象。當用戶按右側時,活動項目應該在「活動」項目旁邊。

這是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'); 

,現在我只是想獲得上一個()或next()替代文字。像這樣的東西

carouselItemLeft.on('click', function() { 
        var connectedInsurace = activeitem.next(); 

回答

1

.next()看着非常下一個兄弟姐妹。您當前的語境是一個形象,你想要的「下一個」形象是一個包裹在一個列表項和錨,所以你需要像:

var next = activeItem.closest("li").next().find("img").attr("alt"); 
+0

感謝這個解釋對我有好處! – rickard 2013-02-19 15:05:46

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'); 
1

eq是從零開始因此:eq(3)選擇不以您的標記和attr返回undefined存在第三li元素。 next是一個jQuery對象的方法,不是String對象,在你的代碼中產生一個ReferenceError

+0

是啊,我知道EQ是從零開始的。這只是一個例子,試圖說明我想要做什麼。我認爲你明白 – rickard 2013-02-19 14:52:27

+0

@ rickard請提供更多代碼,其中'carouselItemLeft'已被定義? – undefined 2013-02-19 14:53:59

+0

'var carouselItemLeft = $('#carousel_container .carousel-item-left');' – rickard 2013-02-19 14:58:25

0

你最好實際分配數據 - *標籤活動項目而不是使用項目上的索引。

所以:

carouselItemLeft.on('click', function() { 
     var $connectedInsurace = $('[data-active="true"]'); 
     $connectedInsurace.data("active", false); 
     $(this).data("active", true); 

    // Get next item 
    var $next = $connectedInsurace.next(); 
});