2012-04-06 21 views
0

Was ich versuche zu tun ist ein [+] oder [-] Zeichen zu einer erweiterbaren Überschrift hinzufügen, so dass, sobald der Benutzer auf die Überschrift klickt, wird sein Inhalt Teil angezeigt und sein Zeichen Teil wird von + zu ändern - und umgekehrt. Da es mehrere Überschriften gibt, habe ich jQuerys next() verwendet. Bis jetzt funktioniert das Umschalten .content gut, aber aus irgendeinem Grund ändert sich das Zeichen nicht.Ändern von Text mit jQuery

<script type="text/javascript"> 
jQuery(document).ready(function() { 
    jQuery(".content").hide(); 

    jQuery(".heading").click(function() 
    { 
    jQuery(this).next(".content").toggle(); 
    if (jQuery(this).next(".sign").text()=="[+]") 
    {jQuery(this).next(".sign").text("[-]");} 
    else 
    {jQuery(this).next(".sign").text("[+]");} 

    }); 
}); 
</script> 

for (int i = 0; i < nodes.getLength(); i++) 
{ 
    Element element = (Element) nodes.item(i); 
    NodeList title = element.getElementsByTagName("Title"); 
    Element ttl = (Element) title.item(0); 
    String linkTitle = getCharacterDataFromElement(ttl); 
    htmlReturn += "<a href='#' class='heading'><h4>" + linkTitle + " <span class='sign'>[+]</span></h4></a>"; 
    htmlReturn += "<div class='content'>"; 

    ... 

} 
+2

Wie sieht das relevante Markup aus? – kinakuta

Antwort

4

Da das Zeichen ein Nachkomme Element der Überschrift, kein Geschwister, verwenden find statt next:

var sign = jQuery(this).find(".sign"); 
sign.text(sign.text() === "[+]" ? "[−]" : "[+]"); 
// Note: A minus sign (−) has the same width as a plus sign (+), 
// whereas a hyphen (-) is typically narrower. 
+1

Das dreimalige Wiederholen von 'jQuery (this) .find (". Sign ")' ist einfach verschwenderisch. Erwägen Sie, es in einer lokalen Variablen zwischenzuspeichern. – DCoder

+0

@DCoder: Aktualisiert und refaktoriert. –

+0

Danke, arbeitete wie ein Charme. – eastboundr

1
if (jQuery(".sign").text()=="[+]") 
{jQuery(".sign").text("[-]");} 
else 
{jQuery(".sign").text("[+]");} 
+2

Nur solange Sie nur ein '.sign' auf der Seite haben. – DCoder

0

Nun, next() bekommt nur die unmittelbare Geschwister. Verwenden Sie stattdessen closest().

+1

'engste()' findet selbst oder acenstors, nicht Geschwister. – DCoder