複数のセクションがあり、それぞれに約 5 ~ 10 個のプロジェクトがあるサイトに取り組んでいます。各セクション内のプロジェクトをスクロールできる次/前のナビゲーションを作成しようとしています。これは私がこれのために持っていたコードです:
var prev_li = $('.projects ul li.selected').prev('li'),
prev_href = $(prev_li).children().attr('href'),
next_li = $('.projects ul li.selected').next('li'),
next_href = $(next_li).children().attr('href');
$('#previous-project').click(function(e){
if ($(prev_li).length) {
window.location = prev_href;
return false;
} else {
window.location = last_href;
return false;
}
});
そして、次のプロジェクトから同じです。私の問題は、重複したプロジェクトがあることです (一部のプロジェクトは複数のセクションにあります)。これは、複数のプロジェクトが同じ URL を持つことを意味するため、一部のプロジェクトは、実際には選択されていない場合でも「選択済み」のクラスを取得します。これは、複数のセクションにあるプロジェクトで次または前のボタンをクリックすると、プロジェクトの最初のインスタンスから前のプロジェクトに移動することを意味します (それが別のセクションにある場合でも)。各セクション内のプロジェクトのリストを指定する効率的な方法が必要なので、それらのプロジェクトのみをローテーションします。
私が持っていた 1 つのアイデアは、プロジェクトの各リストにクラスを追加し、次のようにすることでした。
var traeng_prev_li = $('.transportation-engineering.projects ul li.selected').prev('li'),
traeng_prev_href = $(traeng_prev_li).children().attr('href'),
traeng_next_li = $('.transportation-engineering.projects ul li.selected').next('li'),
traeng_next_href = $(traeng_next_li).children().attr('href');
// same variables for each section
$('#previous-project').click(function(){
if ($(traeng_prev_li).length) {
window.location = traeng_prev_href;
return false;
} else if ($(struct_prev_li).length) {
window.location = struct_prev_href;
return false;
} else if ($(civil_prev_li).length) {
window.location = civil_prev_href;
return false;
} else if ($(archi_prev_li).length) {
window.location = archi_prev_href;
return false;
.... //all the way down through all the sections
これに関する問題は、a) ひどく非効率的であり、b) そのリストに載っていなくても、まだ長さがあり、問題が解決しないと思いますか?