我有一个我写的jQuery函数,它将slideToggle一个额外的表行。可点击行末尾有一个包含按钮的单元格,但是当点击容器div触发该功能时,单击该行中的任意位置将导致新行展开。
我需要在单击按钮时才触发该功能,因为可以将复选框,链接等添加到表格的其他部分。
代码:
var toggleSpeed = 600;
var expandText = "more";
var collapseText = "less";
$(".extrainfo_container").click(function() {
$(this).find('.extrainfo').slideToggle(toggleSpeed);
if ($(this).find('.moreless').text() == collapseText) {
$(this).find('.moreless').text(expandText)
}
else {
$(this).find('.moreless').text(collapseText);
}
});
<table>
<tr>
<td>Header 1</td>
<td>Header 2</td>
<td>Header 3</td>
</tr>
</table>
<div class="extrainfo_container">
<table>
<tr>
<td>Col 1</td>
<td>Col 2</td>
<td><div class="moreless">more</div></td>
</tr>
<tr>
<td colspan="3">
<div class="extrainfo">
Extra information.<p />
Extra information.<p />
</div>
</td>
</tr>
</table>
</div>
工作示例:http://jsfiddle.net/E22XR/69/
我搜索了论坛,虽然我找到了类似的问题和答案,但没有一个能为我工作。我认为必须有一些与众不同的东西,并且/或者有更好的方法来实现相同的结果 - 我对编写自己的函数还很陌生。
如果有更好的方法,则要求我不使用ID,因为可以动态创建任意数量的行。
答案 0 :(得分:2)
我猜你可以做到这一点。
var toggleSpeed = 600;
var expandText = "more";
var collapseText = "less";
$(".moreless").click(function() {
$(".extrainfo_container").find('.extrainfo').slideToggle(toggleSpeed);
if ($(".extrainfo_container").find('.moreless').text() == collapseText) {
$(".extrainfo_container").find('.moreless').text(expandText)
}
else {
$(".extrainfo_container").find('.moreless').text(collapseText);
}
});
编辑:Hack for multipleles rows
var toggleSpeed = 600;
var expandText = "more";
var collapseText = "less";
$(".moreless").click(function () {
var detailsRow = $(this).parent().parent().next();
detailsRow.find('.extrainfo').slideToggle(toggleSpeed);
if ($(this).text() == collapseText)
$(this).text(expandText);
else
$(this).text(collapseText);
});