2010-07-13 51 views
1

我剛開始使用jquery。使用jquery動態設置遞增的鏈接ID?

我有一個.linkCol類每個包含很多鏈接3個div。

我一直在手動設置鏈接的ID,但我知道這將是未來的一個問題。

如果你看看我到目前爲止,我不得不手動添加一個id到我所有的鏈接。

var ttlLinks = $(".linkCol li").size(); 

    for(i=1; i<ttlLinks;i++){ 
     $('#'+i).click(function() { 
     hide(this); 
    }); 
    } 

所以,我想選擇所有的鏈接,通過它們循環,並給每個個人ID。我該如何解決這個問題? 歡呼 尼爾

編輯:

嗨, 我會後我所有的jQuery的,這樣就可以看到什麼,我特林做。它將有望使然後更有意義:

$(函數(){

$('.txtToggle').hide(); // hide all text areas 
$('#txt1').show(); //show the 1st one 

var ttlLinks = $(".linkCol a").size(); 

爲(I = 1;我< = ttlLinks;我++){ $( '#' + I)。點擊(函數(){//我已經手動設置每個鏈路ID,我想這被動態地進行 隱藏(本); });}

function hide(me){ 
    $('.txtToggle').hide(); // hide all text boxes 
    var id  = $(me).attr('id'); 
    var showDiv = '#txt'+ id; 
    $(showDiv).show(); // show the one needed 
} 

});

爲了得到這個工作我必須給我的網頁上的每個鏈接1,2,3,4,5等的id,因爲該值用於選擇正確的內容div以後。有沒有更好的方法來做到這一點?它是一個簡單的show hide,但有很多東西可以顯示和隱藏!

+0

你到底在問什麼? – SLaks 2010-07-13 16:19:16

+0

你的意思是'a'而不是'li'嗎?此外,使用給定的答案,您可能根本不需要ID。 – Tesserex 2010-07-13 16:20:35

回答

2

您可以使用jQuery的each方法:

$('.linkCol li').each(function(index) { 
    $(this).attr('id', index) 
      .click(function() { ... }); 
}); 
+0

'.each()'在這種情況下是不必要的。他只是想將事件應用到集合中,jQuery將隱式地執行循環。 – jasongetsdown 2010-07-13 16:31:32

+0

@jasongetsdown:不設置ID。 – SLaks 2010-07-13 16:40:31

+0

的確如此,但我敢打賭,他並不真正需要他們,儘管可能是這樣。 – jasongetsdown 2010-07-13 16:50:49

1
$('.linkCol li').click(function() { 
    $(this).hide(); 
} 

現在每li是一個元素的子帶班linkCol有click事件。 jQuery將遍歷所有元素的隱含性。只要選擇你想要的.click應用於和設置事件。

如果您想因爲某些其他原因您可以使用ID作爲SLaks在下面做的。請注意,jQuery方法返回它們被調用的jQuery對象,因此.click()鏈接到.attr()。但是,您可能不需要該ID。 .each()將迭代的每個元素的索引傳遞給它的回調,這基本上就是你的ID所做的。

如果你想要列表中的某個元素,你可以全部選擇它們並使用.eq(),如下所示:$('.linkCol li').eq(3)它選擇集合中的第四個元素並返回一個僅包含該元素的jQuery對象。如果您希望元素本身在jQuery對象上使用數組語法,如$('.linkCol li')[3],它將集合中的第四個li作爲DOM對象提供給您。

我得到的是,像你使用的順序ID應該很少,如果使用jQuery時是必要的。

+0

..用更好的解決方案編輯。 – jasongetsdown 2010-07-13 16:32:23