2017-04-03 153 views
1

我試圖做的是從「+」變爲一個可摺疊的列表「 - 」根據列表是否摺疊或展開和背部。我可以使用下面的語句進入文本:如何在另一個跨度內更改跨度文本?

$(this).children().eq(i).children('span')[0].firstChild.outerText; 

但我不知道如何更改值。 JQuery Guru可能會向我展示更優雅的解決方案。這是我的JSFiddle

This answer是最接近的答案我能找到我的問題,但我不知道如何實現它,甚至如果有更好的辦法。

+0

您可以使用類和僞元素'的組合:: before'。 –

+0

你的jQuery完全關閉。你不能依靠來自遠祖元素的事件目標。有一天,你會添加另一個元素的孩子,你的腳本將中斷。 –

+0

另外'$(this).children;'查看jQuery文檔。應該是'。孩子()'...這麼多的錯誤,你的文字的問題是最少的問題在這裏... :( –

回答

2

// Make your code clean and readable! 
 
// Don't target #test. Go directly for your "title/heading" elements ("buttons") 
 
$(".Collapsable").on("click", function() { 
 

 
    // Who is my +/- icon element? 
 
    var $ico = $(this).find(".symbol"); 
 
    // Traverse up to LI and than back down to find my UL sub list: 
 
    var $subList = $(this).closest("li").find("> ul"); 
 
    // Realize the current collapsed/expanded state 
 
    var isSubListHidden = $subList.is(":hidden"); 
 

 
    // OK, time to rock! 
 
    // Change teh text +/- 
 
    $ico.text(isSubListHidden ? "-" : "+"); 
 
    
 
    // Toggle sub lists: 
 
    $subList.stop().slideToggle(); 
 

 
});
.hideUnorderedList { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <ul id="test"> 
 
    <li id="first"> 
 
     <span class="Collapsable"><span class="symbol">+</span>First One</span> 
 
     <ul id="myfirstlist" class="hideUnorderedList"> 
 
     <li>Something to do</li> 
 
     <li>Something else to do</li> 
 
     </ul> 
 
    </li> 
 
    <li id="second"> 
 
     <span class="Collapsable"><span class="symbol">+</span>Second One</span> 
 
     <ul id="mysecondlist" class="hideUnorderedList"> 
 
     <li>Second thing to do</li> 
 
     <li>Second other thing to do</li> 
 
     </ul> 
 
    </li> 
 
    </ul> 
 
</div>

3

這可以簡化不少。而不是試圖去匹配指數,只是使用jQuery的find()方式來指定後裔:

$('#test > li').click(function() { 
 
    var $symbol = $(this).find('.symbol'); 
 
    $(this).find('ul').slideToggle('fast'); 
 
    if ($symbol.text() === ' +') { 
 
    $symbol.text(' -'); 
 
    } else { 
 
    $symbol.text(' +'); 
 
    } 
 
});
.hideUnorderedList { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <ul id="test"> 
 
    <li id="first"> 
 
     <span class="Collapsable"><span class="symbol"> +</span>First One</span> 
 
     <ul id="myfirstlist" class="hideUnorderedList"> 
 
     <li>Something to do</li> 
 
     <li>Something else to do</li> 
 
     </ul> 
 
    </li> 
 
    <li id="second"> 
 
     <span class="Collapsable"><span class="symbol"> +</span>Second One</span> 
 
     <ul id="mysecondlist" class="hideUnorderedList"> 
 
     <li>Second thing to do</li> 
 
     <li>Second other thing to do</li> 
 
     </ul> 
 
    </li> 
 
    </ul> 
 
</div>

+1

'.find(「符號」)'三次呢緩存。 –

+0

@ RokoC.Buljan更好?,P – APAD1

+2

符文可以進一步簡化爲:$ symbol.text(?$ symbol.text()=== '+' ' - ': '+') – DinoMyte