2013-06-13 17 views
45

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ą alert returned showing the value of the variable 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

+1

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'. –

+0

'' #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. –

+0

@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

Odpowiedz

119

Myślisz, że jest zbyt skomplikowana. To właściwie tylko $('#'+openaddress).

Powiązane problemy