Mam następujące menu, które może zawierać do około 50 elementów i dwa łącza, za pomocą których użytkownik może nawigować do poprzedniego lub następnego miasta. Tutaj dla tego przykładu pokazuję tylko cztery adresy.Jak mogę zakodować kontrolę, aby sprawdzić, czy element jest pierwszy lub ostatni z rodzica?
<ul id="menu">
<li><a href="/City/0101004H">1</a></li>
<li><a href="/City/0101004I">2</a></li>
<li><a href="/City/0101004J">3</a></li>
<li><a href="/City/0101004K">4</a></li>
</ul>
<a id="prev" href="#"><img width="16" height="16" src="/images/prev.png">Prev</a>
<a id="next" href="#"><img width="16" height="16" src="/images/next.png">Next</a>
miałem jakąś pomoc na przepełnienie stosu i wpadł na następujący kod:
$("#menu").on('click', 'a[href^="/City"]', function(event) {
event.preventDefault();
var prev = $(this).parent().prev().find('a');
var next = $(this).parent().next().find('a');
$('#prev').prop('href', jQuery(prev).prop('href')).prop('title', 'City ' + jQuery(prev).text());
$('#next').prop('href', jQuery(next).prop('href')).prop('title', 'City ' + jQuery(next).text())
});
Ustawia href poprzedniego i obok odpowiedniej wartości po kliknięciu na jednym z elementów menu. Działa, ale nie dla pierwszego i ostatniego elementu na liście. Co potrzebne jest to:
a) Gdy pierwszy element jest kliknął chciałbym się #prev aby zmienić:
<a id="prev" href="#"><img src="/images/noentry.png"></a>
b) Kiedy ostatni element jest kliknął Chciałbym # obok zmienić:
<a id="next" href="#"><img src="/images/noentry.png"></a>
Czy istnieje prosty sposób mogę to zrobić bez dodawania zbyt dużo dodatkowego kodu?
Zamiast sprawdzać "długość == 0", możesz po prostu sprawdzić prawidłowość i odwrócić ciała 'if/else', np. 'if (next.length) {...} else {...}' –
Dodano drugą wersję, która używa funkcji lokalnej dla wspólnego kodu. – jfriend00