2012-04-06 13 views
0

を使用してテキストを変更すると、ユーザは見出しをクリックすると、その内容の一部が表示され、その符号部分がへ+から変更するように拡張可能な見出しに[+][-]記号を追加することです-およびその逆。複数の見出しがあるので、jQueryのnext()を使用しました。今のところ.contentの切り替え機能はうまく機能しますが、何らかの理由で標識が変わっていません。私が何をしようとしている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

関連マークアップはどのように見えますか? – kinakuta

答えて

4

記号ではなくnextfindを使用し、見出しの子孫要素ではなく、兄弟であるので:

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

'' jQuery(this).find( "。sign") 'を3回繰り返すだけで無駄です。それをローカル変数にキャッシングすることを検討してください。 – DCoder

+0

@DCoder:更新とリファクタリング。 –

+0

ありがとう、魅力的なように働いた。 – eastboundr

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

ページ上に '.sign'が1つしかない限り。 – DCoder

0

まあ、next()しか取得直ちに兄弟。代わりにclosest()を使用してみてください。

+1

'closest()'は、兄弟ではなく、自己またはancenstorsを検索します。 – DCoder

関連する問題