使用 jQuery 查找下一个表格行
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/123401/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Using jQuery to find the next table row
提问by Jay Corbett
Using jQuery, how do you bind a click event to a table cell (below, class="expand"
) that will change the image src
(which is in the clicked cell - original will be plus.gif, alternating with minus.gif) and hide/show
the row immediately below it based on whether that row has a class of hide
. (show it if it has a class of "hide" and hide if it does not have a class of "hide"). I am flexible with changing ids and classes in the markup.
使用 jQuery,你如何将点击事件绑定到一个表格单元格(下面,class="expand"
),该单元格将改变image src
(在点击的单元格中 - 原始将是 plus.gif,与减号.gif 交替)和hide/show
紧接其下方的行基于关于该行是否具有hide
. (如果它有一个“隐藏”类,则显示它,如果它没有“隐藏”类,则隐藏它)。我可以灵活地更改标记中的 ID 和类。
Thanks
谢谢
Table rows
表格行
<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>
回答by dbrien
You don't need the show and hide tags:
您不需要显示和隐藏标签:
$(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: Okay, I added the code for changing the image. That's just one way to do it. I added a class to the expand attribute as a tag when the row that follows is hidden and removed it when the row was shown.
编辑:好的,我添加了更改图像的代码。这只是一种方法。当后面的行被隐藏时,我将一个类作为标签添加到 expand 属性中,并在显示该行时将其删除。
回答by Pseudo Masochist
Nobody has any love for the ternary operator? :) I understand readability considerations, but for some reason it clicks for me to write it as:
没有人喜欢三元运算符吗?:) 我理解可读性方面的考虑,但出于某种原因,它点击让我把它写成:
$(document).ready( function () {
$(".expand").click(function() {
$("img",this).attr("src",
$("img",this)
.attr("src")=="minus.gif" ? "plus.gif" : "minus.gif"
);
$(this).parent().next().toggle();
});
});
...and has the benefit of no extraneous classes.
...并且具有没有无关类的好处。
回答by PCasagrande
I had to solve this problem recently, but mine involved some nested tables, so I needed a more specific, safer version of javascript. My situation was a little different because I had contents of a td and wanted to toggle the next TR, but the concept remains the same.
我最近不得不解决这个问题,但我的涉及一些嵌套表,所以我需要一个更具体、更安全的 javascript 版本。我的情况有点不同,因为我有 td 的内容并想切换下一个 TR,但概念保持不变。
$(document).ready(function() {
$('.expandButton').click(function() {
$(this).closest('tr').next('tr.expandable').fadeToggle();
});
});
Closest grabs the nearest TR, in this case the first parent. You could add a CSS class on there if you want to get extremely specific. Then I specify to grab the next TR with a class of expandable, the target for this button. Then I just fadeToggle()
it to toggle whether it is displayed or not. Specifying the selectors really helps narrow down what it will handle.
Closest 获取最近的 TR,在这种情况下是第一个父级。如果您想要非常具体,您可以在那里添加一个 CSS 类。然后我指定使用可扩展类抓取下一个 TR,即此按钮的目标。然后我只是fadeToggle()
切换它是否显示。指定选择器确实有助于缩小它将处理的范围。
回答by jckeyes
Try this...
尝试这个...
//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');
}
}
Hope this helps.
希望这可以帮助。
回答by Brad8118
This is how the images are set up in the html
这就是在 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>
Change the onClick
event to your own function that's in JS to toggle between them.
将onClick
事件更改为您自己的 JS 函数以在它们之间切换。
In the
在里面
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;");
}
}