2014-11-06 68 views
1

我已经把下面的结构切换类嵌套表

<ul id="Budor"> 
    <li class="L-1">First 
    <ul> 
     <li class="L-2">First Child 
      <ul> 
       <li>abc</li> 
       <li>xyz</li> 
      </ul> 
     </li> 
     <li class="L-2">Second Child 
      <ul> 
       <li>pqr</li> 
       <li>dfg</li> 
      </ul> 
     </li> 

我在节点前添加+/-图标。对于这种结构

.handle { 
    background: transparent url(/images/openedclosed.png) no-repeat left top; 
} 

.closed { background-position: left top; } 
.opened { background-position: left -5px; } 

在Click事件的CSS,我想用一个toggleClass至+之间切换 - 这取决于展开/折叠状态

$('#Budor li').on('click', function (e) { 
     $(this).children('ul').slideToggle().toggleClass('handle closed', 'handle opened'); 
    }); 

但是这是行不通的。我究竟做错了什么?

[额外信息]:每个有节点的家长和子女名单都可以打开,并且有扩展名(+)。当用户单击以展开节点时,(+)应更改为( - )。当再次点击该节点时,它会折叠并将( - )更改为(+)。

+0

请提供演示(http://jsfiddle.net/)。 – 2014-11-06 04:10:46

回答

0

我不确定你想标记为关闭/打开的列表是什么,但它是类似于this

$('#Budor li').on('click', function (e){ 
    $("#Budor>li>ul").toggleClass('closed'); 
    $("#Budor>li>ul").toggleClass('opened'); 
    }); 
0

你可以试试这个:

$('#Budor li').on('click', function (e){ 
    e.stopPropagation(); 
    $(this).children("ul").toggleClass('closed').toggleClass('opened'); 
    }); 

Demo

0

您需要在您的JS代码e.target,而不是这个使用。 Here正在工作小提琴。以下是e.target之外的一些其他更改的代码:

$('li').on('click', function (e) { 
     if ($(e.target).children('ul').is(':visible')) { 
      $(e.target).children('ul').slideToggle().toggleClass('closed'); 
     } 
     else 
      $(e.target).children('ul').slideToggle().toggleClass('opened'); 
     e.stopPropagation(); 
});