2014-09-05 1 views
0

У меня есть таблица, и я бы хотел свернуть следующую строку, если я нажму на заголовок. Кроме того, я хотел бы изменить класс, была ли таблица свернута или нет.slideToggle with classToggle

Я написал:

$('th').click(function(){ 
     var $el = $(this) 
     $(this).closest('tr').next().slideToggle(0) 
     if($(this).closest('tr').next().is(':visible')) { 
      $el.addClass ('opened'); 
      $el.removeClass('closed'); 
     } else { 
      $el.removeClass ('opened'); 
      $el.addClass  ('closed'); 
     } 
}); 

мне интересно, если я могу сделать лучше с JQuery?

Вот HTML код:

<table> 
    <tr> 
     <th colspan="2">Line 1</th> 
    </tr> 
    <tr> 
     <td>data</td> 
     <td>data</td> 
    </tr> 
    <tr> 
     <th colspan="2">Line 2</th> 
    </tr> 
    <tr> 
     <td>date</td> 
     <td>data</td> 
    </tr> 
</table> 

И CSS:

.opened { 
    background-image: url("bullet_toggle_minus.png"); 
    background-repeat: no-repeat; 
    background-position: left center; 
} 

.closed { 
    background-image: url("bullet_toggle_plus.png"); 
    background-repeat: no-repeat; 
    background-position: left center; 
} 
+0

Если вы ищете что-то похожее на ваш 'slideToggle()', его называют 'toggleClass()'. Если вы используете [toggleClass()] (http://api.jquery.com/toggleclass/), вам понадобится один ** по умолчанию ** класс, а другой для изменения состояния – JofryHS

+0

см. Http://jsfiddle.net/arunpjohny/7xr2Lvpk/1/ –

ответ

3

Вы можете использовать toggleClass с несколькими классами:

$('th').click(function() { 
    var $el = $(this) 
    $el.closest('tr').next().slideToggle(0); 
    $el.toggleClass('opened closed'); 
}); 

Не забудьте установить начальное состояние всех элементов, установив класс на th нравится:

<th colspan="2" class="opened">Line 1</th> 

Демо: http://jsfiddle.net/r0xpbqea/

+0

, ему нужно установить это начальное состояние на все элементы '' – AhmadAssaf

+0

Да, так это заслуживает -1? –

+0

не хотел вас обидеть и извините, если бы я сделал :) http://meta.stackexchange.com/questions/2451/why-do-you-cast-downvotes-on-answers – AhmadAssaf

-1

Script

$('th').click(function() { 
     var $el = $(this); 
     $(this).closest('tr') 
       .next() 
       .slideToggle(0) 
       .toggleClass('closed'); 
}); 

Стиль

tr { 
    background-image: url("bullet_toggle_minus.png"); 
    background-repeat: no-repeat; 
    background-position: left center; 
} 

tr.closed { 
    background-image: url("bullet_toggle_plus.png"); 
    background-repeat: no-repeat; 
    background-position: left center; 
} 

Fiddle: http://jsfiddle.net/teh94dma/

+0

это только переключит класс «закрыто» снова и снова, он не будет делать желаемого поведения, переключая два класса – AhmadAssaf

0
$('tr').addClass('opened'); 
$('th').click(function(){ 
     var $el = $(this) 
     $(this).closest('tr').next().slideToggle(0).toggleClass('opened closed'); 
}); 

CSS

tr { 
    background-repeat: no-repeat; 
    background-position: left center; 
} 

.opened { 
    background-image: url("bullet_toggle_minus.png"); 
} 

.closed { 
    background-image: url("bullet_toggle_plus.png"); 
}