我嘗試以下方法:JQuery的:事件的順序和遍歷DOM
一個用於鏈接ul
,另一個用於幻燈片
<ul class="infoslider">
<li><a data-orbit-link="slidegroup1" href="#">Slides1</a></li>
<li><a data-orbit-link="slidegroup2" href="#">Slides2</a></li>
</ul>
<ul id="infoslider">
<li class="" data-orbit-slide="slidegroup1"> <img src="img1.png" ></li>
<li class="active" data-orbit-slide=""> <img src="img2.png" ></li>
<li class="" data-orbit-slide="slidegroup2"> <img src="img3.png" ></li>
<li class="" data-orbit-slide=""> <img src="img4.png" ></li>
</ul>
本場單擊「下一步」
<a class="orbit-next" href="#">Next</a>
我點擊「orbit-next」轉發幻燈片。
使用JQuery我檢查#infoslider li data-orbit-slide
-屬性。如果它是空的,它會遍歷到它找到一個字符串。 然後它添加相應的ul.infoslide li
活動類。
$j("a.orbit-next").click(function() {
//select the active li
var test = $j("#infoslider > li.active");
//test, if there is a string in "data-orbit-slide"
if (test.attr("data-orbit-slide").length > 0) {
var link = test.attr("data-orbit-slide");
} else {
//if not, get the elements
var term1 = document.getElementById('infoslider');
//and traverse up until a string is found
var link = $j("#infoslider li.active").prevUntil(term1,"li[data-orbit-slide!='']").attr("data-orbit-slide");
}
//select the coresponding a in div.infoslider
var target = $j("a[data-orbit-link='" + link + "']").parent();
//remove the classes active
$j("div.infoslider > ul > li").removeClass("active");
//add the active class
target.addClass("active");
});
這工作得很好。 但:
- ul.infoslider李總是「一個落後」。即當幻燈片img3.png出現時,活動類仍在「slidegroup1」上。直到「img4.png」出現「slidegroup2」纔會獲得主動類。爲什麼? 它與JQuery/Orbit-Slider /我的JQuery執行的事件順序有關嗎?
- 有沒有更簡單的方法來實現我想要的?
在此先感謝您的幫助。
非常感謝您的幫助。你的代碼幾乎解決了我的問題。我剛剛加了點東西。 – achterbahn 2013-04-23 17:42:37