2009-04-25 4 views
5

To jest mój pierwszy wpis na tej dość spiffingowej stronie, więc idź łatwo, jeśli to zostało omówione gdzie indziej (nie mogę go znaleźć, jeśli ma).JQuery, jeśli jeszcze za pomocą wtyczki URL parser, musi być bardziej eleganckie rozwiązanie!

używam jQuery URL parsera plugin znaleźć tutaj: http://projects.allmarkedup.com/jquery_url_parser/

mogę to robić, co chcę, ale kod jest raczej nieefektywne. Mam kolekcję ukrytych div, które są otwierane po kliknięciu odpowiedniego nagłówka. Używam parsera adresów URL, więc jeśli kliknięto link z innej strony, widoczny jest odpowiedni element div.

Mój kod wygląda następująco:

if 
(jQuery.url.attr('anchor') == 'question1'){ 
    $('#answer1').show(); 
} 
else if 
(jQuery.url.attr('anchor') == 'question2'){ 
    $('#answer2').show(); 
} 
else if 
(jQuery.url.attr('anchor') == 'question3'){ 
    $('#answer3').show(); 
} 
else if 
(jQuery.url.attr('anchor') == 'question4'){ 
    $('#answer4').show(); 
} 
else if 
(jQuery.url.attr('anchor') == 'question5'){ 
    $('#answer5').show(); 
} 
else if 
(jQuery.url.attr('anchor') == 'question6'){ 
    $('#answer6').show(); 
} 
else if 
(jQuery.url.attr('anchor') == 'question7'){ 
    $('#answer7').show(); 
} 
else if 
(jQuery.url.attr('anchor') == 'question8'){ 
    $('#answer8').show(); 
}; 

Jak widać jest to dość długo zdyszany. To, co naprawdę chcę móc zrobić, to wziąć numer na końcu adresu URL i dołączyć go do #answer, dzięki czemu rzeczy są znacznie bardziej kompaktowe. Starałem się przypisać wynik (jQuery.url.attr („kotwicy”) do zmiennej, ale mam trochę problemów realizacji tego. Każda pomoc będzie bardzo mile widziane!

Odpowiedz

10
var match = jQuery.url.attr('anchor').match(/^question([0-9]+)$/); 
if (match && match.length > 0) { 
    $('#answer' + match[1]).show(); 
} 

aktualizowana.

+0

To genialne! Dzięki! – i0n

+0

Właśnie odkryłem problem z tym rozwiązaniem. Jeśli nie ma znacznika zakotwiczenia, funkcjonalność wyświetlania elementów nagłówka przestaje działać! Stworzyłem nowe pytanie ze wszystkimi szczegółami i opracowałem na to pytanie. Ten nowy można znaleźć tutaj: http://is.gd/uGUm – i0n

+0

To naprawdę nie jest problem z tym rozwiązaniem. jeśli chcesz wyświetlić domyślne pytanie, zmień pierwszą linię na var match = (jQuery.url.attr ('anchor') | "question1"). match (/^question ([0-9] +) $ /) ;; –

1

można również zrobić to w jednym wierszu dla kodu takiego.

$('#answer' + $.url.attr('anchor').match(/question(\d+)|(.*)/)[1]).show(); 

teraz, technika ta może potrwać kilka wyjaśnień. Zasadniczo, co robisz tutaj próbuje znaleźć ciąg, który zawiera pytanie (n) gdzie gdzie "pytanie (n)" jest pierwszym meczem, a (n) jest drugim meczem ow, jeśli to nie zostanie znalezione, to "|(.*)" mówi "LUB Cokolwiek", a ponieważ jest zawinięte w(). * wszystko jest pierwszym dopasowaniem i drugim dopasowaniem.

Dzięki udanym meczu, do której dzwonisz

$('answer' + '1').show(); 

Przy nieudanym meczu dzwonisz

$('answer' + '').show(); // where $('answer' + '').length == 0 

który nic nie robi.

Jeśli nie chcesz uwzględniać wielkości liter, użyj tego jako wyrażenia regularnego.

/question(\d+)|(.*)/i 
+0

To działa również, wielkie dzięki! – i0n

+0

, który wyrzuci wyjątek, jeśli twój mecz nie zadziała –

+0

@Deviant Przetestowałem go z nową aktualizacją i nie wyrzucił żadnych błędów – bendewey

Powiązane problemy