Показать/Скрыть таблицы с помощью jQuery
у меня есть ряд таблиц, похожих на следующий html-код:
<table id="film"><tr>
<th class="1">//HEAD CONTENT 1//</th>
</tr>
<tr>
<td class="1">//BODY CONTENT 1//</td>
</tr></table>
<table id="film"><tr>
<th class="2">//HEAD CONTENT 2//</th>
</tr>
<tr>
<td class="2">//BODY CONTENT 2//</td>
</tr></table>
Я хочу, чтобы таблицы расширялись индивидуально, когда соответствующая глава (<th>
) нажата. Кроме того, таблицы должны начинаться с нуля. Я использую следующий скрипт jQuery:
$(document).ready(function(){
$('#film td').hide();
});
$(document).ready(function(){
var n1 = 0;
$('#film th.1').click(function(){
if(n1 == 0){
$('#film td.1').show();
n1 = 1;
}else{
$('#film td.1').hide();
n1 = 0;}
});
var n2 = 0;
$('#film th.2').click(function(){
if(n2 == 0){
$('#film td.2').show();
n2 = 1;
}else{
$('#film td.2').hide();
n2 = 0;}
});
});
однако, когда я выполняю только верхнюю таблицу, она может показывать/скрывать не вторую. Кто-нибудь видит, в чем я ошибаюсь?
6 ответов
вы используете тот же идентификатор для нескольких элементов. При поиске по идентификатору jQuery возвращает только один элемент (первый с этим идентификатором). Таким образом, ваш код действует только на первой таблице. Используйте класс в таблицах вместо id.
<table class="film">......</table>
$('.film').each(function(f) {
//this function will execute for each element with the class "film"
//refer to the current element during this function using "$(this)"
});
гораздо проще сделать это, используя класс вместо идентификатора для table
значения. Таким образом, их можно назвать группой более легко
<table class="film"> ...
после чего следующий jquery должен дать вам поведение, которое вы ищете
$(document).ready(function() {
$('.film td').hide();
$('th').click(function() {
$(this).parents('table').find('td').toggle();
});
});
Скрипка:http://jsfiddle.net/WZUAZ/1/
вот рабочая версия:http://jsfiddle.net/6Ccj7/
ваш html сломан. Измените это:
<td class"2">//BODY CONTENT 2//</td>
для этого:
<td class="2">//BODY CONTENT 2//</td>
кроме того, вы использовали id для film
когда на самом деле у вас есть 2 экземпляров. Вы класс вместо:
<table class="film"><tr>
<th class="1">//HEAD CONTENT 1//</th>
</tr>
<tr>
<td class="1">//BODY CONTENT 1//</td>
</tr></table>
<table class="film"><tr>
<th class="2">//HEAD CONTENT 2//</th>
</tr>
<tr>
<td class="2">//BODY CONTENT 2//</td>
</tr></table>
вот обновленный JS:
$(document).ready(function(){
$('.film td').hide();});
$(document).ready(function(){
var n1 = 0;
$('.film th.1').click(function(){
if(n1 == 0){
$('.film td.1').show();
n1 = 1;
}else{
$('.film td.1').hide();
n1 = 0;}
});
var n2 = 0;
$('.film th.2').click(function(){
if(n2 == 0){
$('.film td.2').show();
n2 = 1;
}else{
$('.film td.2').hide();
n2 = 0;}
});
});
две проблемы:
Во-первых, ваш HTML сломан
Изменить
<td class"2">//BODY CONTENT 2//</td>
до
<td class="2">//BODY CONTENT 2//</td>
во-вторых, html id должен быть уникальным, поэтому я предлагаю использовать классы.
вот рабочий пример:http://jsfiddle.net/jkohnen/tBkh4/
я использовал .toggle (), чтобы упростить jQuery немного
надеюсь, что это поможет, и счастливое кодирование.
Показать/Скрыть таблицу с помощью jQuery
код здесь !
я используюslideToggle + data attr
используя этот jQuery, вы можете показать и скрыть
$("#hide").click(function(){
$("p").hide();
});
$("#show").click(function(){
$("p").show();
});
HTML-код
<button id="hide">Hide</button>
<button id="show">Show</button>