2012-04-12 2 views
2

Я очень новичок в jQuery, и это мое первое сообщение в Stack Overflow.jQuery code refactoring basic toggle function

Я пишу скрипт Toggle, если щелкнут несколько (но не все) ячеек таблицы, скрипт переключит видимость tr ниже него и выполнит класс изменения в div в одном из для отображения значка плюс/минус. Я надеюсь упростить свой сценарий и HTML или получить общие указания о том, как сделать это лучше.

JQuery выглядит следующим образом:

$(function() { 

/************************************************************/ 
// Show/Hide functionality 

    $('.showDetails', '#summaryTable').hide(); 

    $('#summaryTable').on('click', '.toggleIt', function(e){ 

    var $this = $(this).parents("tr"); 

    $this.next().toggle(0, function() { 
     var rowExpand = $('.rowExpand', $this); 
     rowExpand.toggleClass('rowContract'); 
    }); 
    }); 

/************************************************************/ 

}); 

HTML, выглядит следующим образом:

<table id="summaryTable"> 

<thead> 
<tr> 
... 
</tr> 
</thead> 

<tbody> 

<tr> 
<td class="toggleIt"><div class="rowExpand">Expand/Contract details</div></td> 
<td class="toggleIt">Content</td> 
<td class="toggleIt">Content</td> 
<td>*input field*</td> 
<td class="toggleIt">Content</td> 
<td class="toggleIt">Content</td> 
<td>*Trash can icon*</td> 
</tr> 

<tr class="showDetails"> 
<td colspan="7" class="expand"> 

    <div> 
    Content to be shown when toggled... 
    </div> 

</td> 
</tr> 

<!-- Rinse and repeat --> 

</tbody> 

</table> 

Обратите внимание всех тех, кто toggleIt классы на клетках, где это OK нажать и есть тр расширить? Похоже, я должен уметь вместо этого размещать класс только в ячейках таблицы, где я не хочу, чтобы таблица расширялась, если щелкнуть. (Поле ввода и ячейки корзины.)

Любые мысли или предложения приветствуются. Спасибо!

+0

Вот JSFiddle с помощью JQuery в 'нет()' селектор: http://jsfiddle.net/ypeDw/ –

+0

@KarlBarker - Спасибо за обмен на ссылку выше. Я вижу, как вы изменили мой код, чтобы делать то, что я просил. Глядя на jQuery API и используя пример Mikey, я смог также выполнить это с использованием метода .not(). В очередной раз благодарим за помощь! – forcequitIO

ответ

1

вы можете сделать это с помощью: не селектора (http://api.jquery.com/not-selector/) , например.

$("td:not(.toggleDisabled)").each(function(){$(this).click(function(){$(this).toggle()})}) 
+0

Блестящий. Именно то, на что я надеялся. Большое спасибо. – forcequitIO