2013-06-13 8 views
45

Ich habe Probleme mit einer Variablen als Selektor für einen Absatz, auf dem ich Maßnahmen ergreifen möchte. Insbesondere habe ich mehrere Titelelemente und die gleiche Anzahl von Absätzen. Das gewünschte Ergebnis ist, dass wenn ich auf Titel1 klicke, ich eine Aktion auf Absatz1 mache. Ich habe einen einfachen Fall für Entwicklungszwecke gemacht, wobei, wenn ich auf einen Titel klicke, der Text des entsprechenden Absatzes die Farbe ändert. Wenn ich die Lösung hart Code, funktioniert es, aber eine Variable übergeben, wie der Selektor fehlschlägt.jQuery: Verwenden einer Variablen als Selektor

Die jQuery ist wie folgt:

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


    }); 

Die Warnung gibt die folgende Variable alert returned showing the value of the variable die richtige zu sein scheint, und passt die hart codierte Version. Ich habe die HTML weggelassen, da es in der hartcodierten Version funktioniert Ich nehme an, dass es kein Problem auf dieser Seite gibt.

Ich würde mich über jede Anleitung freuen, was ich falsch mache und wie ich es korrigieren kann.

Danke

+1

Versuchen Sie, die zweiten Anführungszeichen um "# section1" zu entfernen, so dass die tatsächlich an jQuery übergebene Zeichenfolge '# section1' ist, wie gewünscht. Wenn das Sinn macht. Versuchen Sie einfach, "#" + openaddress "zu übergeben. Beachten Sie, dass Ihr Code "# section1" '' durchgibt und Ihr Test '# section1' verwendet. –

+0

Das '" #foo "' in '$ (" # foo ")' wird ** String-Literal ** genannt und erzeugt den String * value * '# foo'. Zeichenfolgenliterale werden durch zwei Anführungszeichen (doppelte oder einfache Anführungszeichen) gekennzeichnet. Ähnliches gilt für andere Werte: '[...]' bezeichnet ein Array, '/.../' ein Regex-Literal, '{...}' ein Objekt usw. Diese Symbole teilen dem Parser mit, wie er das interpretieren soll Zeichenfolge. Sie sind ** nicht ** Teil des Wertes selbst! Also erwartet jQuery '# foo' als Selektor, aber Sie fügen die Anführungszeichen in den Wert ein und übergeben' '# foo'', was falsch ist. –

+0

@FelixKling: Danke für die Hilfe. Ich war nicht klar über das String-Literal und den von jQuery verwendeten Wert. Ich brauchte die Erklärung, daher war die 'doppelte' Frage für mich nicht hilfreich (aber nur wegen meiner Ignoranz). – dorich

Antwort

119

Sie denken zu kompliziert. Es ist eigentlich nur $('#'+openaddress).