2013-06-13 3 views
45

J'ai des problèmes pour utiliser une variable comme sélecteur pour un paragraphe sur lequel je veux agir. Plus précisément, j'ai plusieurs éléments de titre et le même nombre de paragraphes. Le résultat souhaité est que si je clique sur Title1 alors je prends une action sur le paragraphe 1. J'ai fait un cas simple à des fins de développement par lequel si je clique sur un titre alors le texte du paragraphe correspondant change de couleur. Si je code dur la solution, cela fonctionne mais en passant une variable à mesure que le sélecteur échoue.jQuery: utilisation d'une variable comme sélecteur

Le jQuery est la suivante:

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'alerte retourne la variable suivante alert returned showing the value of the variable qui semble être correct et correspond à la version codée en dur. J'ai omis le html puisqu'il fonctionne dans la version hard coded je suppose qu'il n'y a aucun problème de ce côté.

J'apprécierais toute orientation sur ce que je fais mal et comment le corriger.

Merci

+1

Essayez d'omettre les deuxièmes guillemets autour de '" # # section1 "' de sorte que la chaîne effectivement passée à jQuery soit '# section1' comme vous le souhaitez. Si ça a du sens. Essayez simplement de passer ''#' + openaddress'. Notez que votre code passe dans '" # # section1 "' et votre test utilise '# section1'. –

+0

Le '" #foo "' dans $ ("# foo") 'est appelé un ** littéral de chaîne ** et il produit la chaîne * valeur *' # foo'. Les littéraux de chaîne sont indiqués par deux guillemets (guillemets doubles ou simples). Ceci est similaire pour les autres valeurs: '[...]' dénote un tableau, '/.../' un regex littéral, '{...}' un objet, etc. Ces symboles indiquent à l'analyseur comment interpréter le séquence de caractères. Ils ne font pas ** partie de la valeur eux-mêmes! Donc, jQuery attend '#foo' comme sélecteur, mais vous incluez les guillemets dans la valeur et passez' '# foo'', ce qui est incorrect. –

+0

@FelixKling: Merci pour l'aide. Je n'étais pas clair sur le littéral de chaîne et la valeur utilisée par jQuery. J'avais besoin de l'explication, d'où la question «dupliquer» pour moi n'était pas utile (mais seulement à cause de mon ignorance.) – dorich

Répondre

119

Vous pensez trop compliqué. En fait, c'est juste $('#'+openaddress).

Questions connexes