2013-10-08 60 views
0

我有一個HTML包含列表中的div元素,jQuery的覆蓋/刪除特定類時多類被分配給一個ID

<div id='tree'> 
<ul> 
<li id='1' class='folder expand'>1</li> 
<li id='2'>2</li> 
<li id='3' >3</li> 
<li id='4'>4</li> 
</ul> 
</div> 

我需要找到

1.如果li元素有類'文件夾'?

$('#tree li').live('click',function() { 
    if($(this).hasClass('folder')){ 
     if($(this).hasClass('expand')){ 
     $(this).removeClass('expand').addClass('cl'); 
     } 
     else{ 
     $(this).removeClass('cl').addClass('expand'); 
     } 
      } 
} 

此代碼不起作用。它總是去其他條件。

2.在上面我想用'collapse'重寫類'expand'。如何刪除只有名稱匹配的類?

+0

不能使用.toggleClass()? –

+0

看起來你的代碼工作正常:http://jsfiddle.net/qYwkR/。但如果可能的話,我會同意使用'toggleClass()'和'on()'。 –

回答

1

該代碼似乎沒有錯,它應該按給定的方式工作。但是如果只打算切換它們,則不需要查看哪些類。上述所有可以簡化爲

$('#tree li.folder').live('click',function() { 
    $(this).toggleClass("expand cl"); 
}); 

另外,由於live已被棄用(事實上完全jQuery中1.9移除)使用on上述應寫:

$('#tree').on('click', 'li.folder', function() { 
    $(this).toggleClass("expand cl"); 
}); 
0

我沒有看到你的代碼有什麼問題。您應該將您的「現場」監聽器更改爲「開」,因爲「現場」已被棄用。

這裏的決策樹與提醒工作版本,以幫助你找到你在哪裏

$(document).on('click', '#tree li', function(){ 
    if($(this).hasClass('folder')){ 
     if($(this).hasClass('expand')){ 
     $(this).removeClass('expand').addClass('cl'); 
     alert("i have folder and expand classes"); 
     } 
     else{ 
     $(this).addClass('expand'); 
      alert("i have folder, but not expand classes"); 
     } 
    } 
    else{ 
     alert("I have no folder class"); 
    } 
}); 

Fiddle here