2013-06-13 23 views
45

Sto riscontrando problemi nell'utilizzare una variabile come selettore per un paragrafo su cui voglio agire. In particolare, ho diversi elementi titolo e lo stesso numero di paragrafi. Il risultato desiderato è che se faccio clic su Title1, eseguo un'azione sul paragrafo 1. Ho fatto un semplice caso per scopi di sviluppo, per cui se faccio clic su un titolo, il testo del paragrafo corrispondente cambia colore. Se eseguo il codice fisso della soluzione, funziona ma passa una variabile non appena il selettore fallisce.jQuery: utilizzo di una variabile come selettore

Il jQuery è la seguente:

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. 
      }); 


    }); 

L'avviso restituisce la seguente variabile alert returned showing the value of the variable che sembra essere corretta e corrisponda la versione hard coded. Ho omesso l'html dato che funziona nella versione hard coded presumo che non ci siano problemi da quel lato.

Apprezzerei qualsiasi guida su cosa sto facendo male e su come correggerlo.

Grazie

+1

Prova ad omettere le virgolette secondarie in '' # section1 "' così la stringa effettivamente passata a jQuery sarà '# section1' come desiderato. Se questo ha un senso. Prova a passare '' # '+ openaddress'. Nota che il tuo codice passa in "" # section1 "' e il tuo test usa '# section1'. –

+0

Il '' "#foo" 'in' $ ("# pippo") 'è chiamato a ** stringa letterale ** e produce la stringa * valore *' # pippo'. I valori letterali stringa sono indicati da due virgolette (virgolette singole o doppie). Questo è simile per altri valori: '[...]' denota un array, '/.../' un regex letterale,' {...} 'un oggetto, ecc. Questi simboli dicono al parser come interpretare il sequenza di caratteri. Sono ** non ** parte del valore stesso! Quindi, jQuery si aspetta '# foo' come selettore, ma stai includendo le virgolette nel valore e passa' '# foo'', che non è corretto. –

+0

@FelixKling: Grazie per l'aiuto. Non ero chiaro sulla stringa letterale e il valore usato da jQuery. Avevo bisogno di una spiegazione, quindi la domanda "duplicata" non mi è stata di aiuto (ma solo a causa della mia ignoranza). – dorich

risposta

119

Stai pensando troppo complicato. In realtà è solo $('#'+openaddress).