2012-04-06 81 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 2012-04-06 17:42:17

回答

4

因为符号为标题,没有兄弟姐妹的后代元素,使用find代替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

重复'jQuery(this).find(“。sign”)'三次只是浪费。考虑将其缓存在局部变量中。 – DCoder 2012-04-06 17:48:21

+0

@DCoder:更新和重构。 – 2012-04-06 17:51:28

+0

谢谢,像一个魅力工作。 – eastboundr 2012-04-10 16:11:40

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

只要你在页面上只有一个'.sign'。 – DCoder 2012-04-06 17:44:36

0

好,next()只得到直系兄弟姐妹。请尝试使用closest()

+1

'最接近()'发现自己或ancenstors,而不是兄弟姐妹。 – DCoder 2012-04-06 17:45:17