2010-08-22 122 views
0

我有一系列的水平div盒,我需要添加相關的href鏈接到下一個與anchorlinks。由於它們是動態生成的,我需要在JavaScript中添加href。動態添加href到鏈接

的預期效果將是:

<div id="post1"> 
<a class="next-video" href="#post2">NextVideo</a> 
</div> 

<div id="post2"> 
<a class="next-video" href="#post3">NextVideo</a> 
</div> 

添加腳本

$('.next-video').each(function(index) { 
    $(this).attr('href', '#post' + (index + 2)); 
}); 

,但似乎並沒有針對.next-video類,這是真人版: http://www.warface.co.uk/clients/detail-shoppe/test-scroll

非常感謝

+0

你有很多'ID =頁面中的「wrapper」和「id =」post2「'元素,以及其他問題:http://validator.w3.org/check?uri=http://www.warface.co.uk/clients/detail -shoppe/test-scroll&charset =(detect + automatically)&doctype = Inline&group = 0你應該修正這些...在頁面加載後運行腳本運行正常,看看修復無效標記是否有助於它正確運行'document.ready '。 – 2010-08-22 11:50:20

+0

嗚嗚,感謝尼克的標記建議,並且效果很棒:) – Rob 2010-08-22 11:59:37

回答

3

你可以使用.attr()做這樣的事情:

$("a.next-video").attr('href', function(i) { 
    return '#post' + (i+2);  
}); 

因爲jQuery的1.4+,.attr()需要作出這個功能非常乾淨(和運行成本比較便宜)。

或者,如果你不知道職位數目(例如,他們只是不按數字順序),可以從下一<div>得到它,就像這樣:

$("a.next-video").attr('href', function(i) { 
    return '#' + $(this).parent().next("div[id^='post']").attr('id'); 
}); 
+0

你說「運行更便宜」這是什麼意思?它更節省時間? – Tarik 2010-08-22 12:49:30

+0

@Braveyard - 你並沒有創建另一個jQuery對象,你正在設置DOM屬性,所以它的成本更低,因爲它的工作量更少......所以是的,它應該更省時,除非有很奇怪的東西繼續。 jQuery對象是對DOM元素的引用的數組,我們只是在數組設置屬性上循環......而不是將數組中的每個引用*也*轉換爲jQuery對象來做一些工作......如果你不喜歡'*需要*一個jQuery對象,跳過中間人並保存一些CPU,就像你在第一個代碼塊中看到的那樣,它也更加簡潔:) – 2010-08-22 12:52:36

3
$('.next-video').each(function(index) { 
    $(this).attr('href', '#post' + (index + 2)); 
}); 
+0

你能告訴我爲什麼你選擇方法而不是選擇方式來選擇.next-video的每個元素嗎? – Tarik 2010-08-22 11:10:01

+0

@Braveyard,我不明白你的問題。 – 2010-08-22 11:11:57

+0

嘿,似乎沒有針對.nextvideo類,因爲它沒有添加href值。這是現場示例:http://www.warface.co.uk/clients/detail-shoppe/test-scroll – Rob 2010-08-22 11:18:58