Mam problemy z używaniem zmiennej jako selektora dla akapitu, w którym chcę podjąć działanie. W szczególności mam kilka elementów tytułowych i taką samą liczbę akapitów. Pożądany wynik jest taki, że jeśli kliknę na Tytuł 1, podejmę akcję na akapicie 1. Zrobiłem prosty przypadek do celów programistycznych, w którym po kliknięciu tytułu, tekst odpowiedniego akapitu zmienia kolor. Jeśli ciężko koduję rozwiązanie, działa, ale przekazuje zmienną, ponieważ selektor nie działa.jQuery: użycie zmiennej jako selektora
JQuery jest następujący:
jQuery(document).ready(function($){
$(this).click(function(){
var target=(event.target.id);// Get the id of the title on which we clicked. We will extract the number from this and use it to create a new id for the section we want to open.
alert(target);// checking that we are getting the right value.
var openaddress=target.replace(/click/gi, "section");//create the new id for the section we want to open.
alert('"#'+openaddress+'"');//Confirm that the correct ID has been created
$('"#'+openaddress+'"').css("color", "green");//get the id of the click element and set it as a variable.
//$("#section1").css("color", "green");//Test to confirm that hard coded selector functions correctly.
return false;// Suppress the action on the anchor link.
});
});
Alert zwraca następującą zmienną który wydaje się być prawidłowa i zgodna z wersją zakodowanego. Pominąłem kod HTML, ponieważ działa on w wersji zakodowanej na twardo. Zakładam, że nie ma problemu z tej strony.
Byłbym wdzięczny za wszelkie wskazówki dotyczące tego, co robię źle i jak to poprawić.
Dzięki
Spróbuj pomijać drugie cudzysłowy wokół "# section1" ', więc ciąg faktycznie przekazany do jQuery będzie" # section1 "zgodnie z życzeniem. Jeśli to ma sens. Spróbuj po prostu przekazać ''#' + openaddress'. Zauważ, że twój kod przechodzi w '' # section1 "', a twój test używa '# section1'. –
'' #foo «' in '$ (" # foo ")' jest nazywane ** literałem ** i tworzy łańcuch * wartość * '# foo'. Literały łańcuchowe są oznaczone dwoma cudzysłowami (podwójnymi lub pojedynczymi cudzysłowami). Podobnie jest w przypadku innych wartości: '[...]' oznacza tablicę, '/.../' literał regex, '{...}' obiekt itp. Te symbole informują analizator składni o tym, jak interpretować sekwencja znaków. Są ** nie ** częścią samej wartości! Tak więc jQuery spodziewa się, że '# foo' będzie selektorem, ale uwzględnisz cudzysłowy w wartości i przekazujesz' '# foo'', co jest niepoprawne. –
@FelixKling: Dzięki za pomoc. Nie było jasne, na literał ciągu i wartość używana przez jQuery. Potrzebowałem wyjaśnienia, więc pytanie "duplikat" dla mnie nie było pomocne (ale tylko z powodu mojej niewiedzy). – dorich