Использование jQuery для поиска следующей строки таблицы
Используя jQuery, как связать событие click с ячейкой таблицы (ниже, class="expand"
), которая изменит image src
(который находится в ячейке, по которой щелкнули - оригинал будет plus.gif, чередующийся с minus.gif) и hide/show
строка, расположенная непосредственно под ней, в зависимости от того, имеет ли эта строка класс hide
. (показать, если у него есть класс "скрыть" и скрыть, если у него нет класса "скрыть"). Я гибок в изменении идентификаторов и классов в разметке.
Благодаря
Строки таблицы
<tr>
<td class="expand"><img src="plus.gif"/></td>
<td>Data1</td><td>Data2</td><td>Data3</td>
</tr>
<tr class="show hide">
<td> </td>
<td>Data4</td><td>Data5</td><td>Data6</td>
</tr>
Ответы
Ответ 1
Вам не нужны теги show и hide:
$(document).ready(function(){
$('.expand').click(function() {
if( $(this).hasClass('hidden') )
$('img', this).attr("src", "plus.jpg");
else
$('img', this).attr("src", "minus.jpg");
$(this).toggleClass('hidden');
$(this).parent().next().toggle();
});
});
edit: Хорошо, я добавил код для изменения изображения. Это всего лишь один способ сделать это. Я добавил класс в атрибут expand как тег, когда следующая строка скрыта и удалена, когда строка была показана.
Ответ 2
Никто не любит любовь к тройному оператору?:) Я понимаю соображения читаемости, но по какой-то причине он нажимает на меня, чтобы написать его как:
$(document).ready( function () {
$(".expand").click(function() {
$("img",this).attr("src",
$("img",this)
.attr("src")=="minus.gif" ? "plus.gif" : "minus.gif"
);
$(this).parent().next().toggle();
});
});
... и имеет преимущество без посторонних классов.
Ответ 3
Мне пришлось решить эту проблему недавно, но мои были связаны с некоторыми вложенными таблицами, поэтому мне нужна была более конкретная, более безопасная версия javascript. Моя ситуация была немного иной, потому что у меня было содержимое td и я хотел переключить следующий TR, но концепция осталась прежней.
$(document).ready(function() {
$('.expandButton').click(function() {
$(this).closest('tr').next('tr.expandable').fadeToggle();
});
});
Ближайший захват ближайшего TR, в этом случае первого родителя. Вы можете добавить класс CSS там, если хотите получить чрезвычайно конкретный характер. Затем я указываю, чтобы захватить следующий TR с классом расширяемой цели для этой кнопки. Тогда я просто fadeToggle()
, чтобы переключать отображение или нет. Указание селекторов действительно помогает сузить то, что он будет обрабатывать.
Ответ 4
Попробуйте это...
//this will bind the click event
//put this in a $(document).ready or something
$(".expand").click(expand_ClickEvent);
//this is your event handler
function expand_ClickEvent(){
//get the TR that you want to show/hide
var TR = $('.expand').parent().next();
//check its class
if (TR.hasClass('hide')){
TR.removeClass('hide'); //remove the hide class
TR.addClass('show'); //change it to the show class
TR.show(); //show the TR (you can use any jquery animation)
//change the image URL
//select the expand class and the img in it, then change its src attribute
$('.expand img').attr('src', 'minus.gif');
} else {
TR.removeClass('show'); //remove the show class
TR.addClass('hide'); //change it to the hide class
TR.hide(); //hide the TR (you can use any jquery animation)
//change the image URL
//select the expand class and the img in it, then change its src attribute
$('.expand img').attr('src', 'plus.gif');
}
}
Надеюсь, что это поможет.
Ответ 5
Вот как изображения создаются в html
<tr>
<td colspan="2" align="center"
<input type="image" src="save.gif" id="saveButton" name="saveButton"
style="visibility: collapse; display: none"
onclick="ToggleFunction(false)"/>
<input type="image" src="saveDisabled.jpg" id="saveButtonDisabled"
name="saveButton" style="visibility: collapse; display: inline"
onclick="ToggleFunction(true)"/>
</td>
</tr>
Измените событие onClick
на свою собственную функцию, чтобы в JS переключаться между ними.
В
ToggleFunction(seeSaveButton){
if(seeSaveButton){
$("#saveButton").attr("disabled", true)
.attr("style", "visibility: collapse; display: none;");
$("#saveButtonDisabled").attr("disabled", true)
.attr("style", "display: inline;");
}
else {
$("#saveButton").attr("disabled", false)
.attr("style", "display: inline;");
$("#saveButtonDisabled")
.attr("disabled", true)
.attr("style", "visibility: collapse; display: none;");
}
}