slideToggle可以用于表格吗?
我想对一个表格的行使用slideToggle,但是它没有任何效果,只是直接显示出来了。
slideToggle可以用于表格吗?
我想对一个表格的行使用slideToggle,但是它没有任何效果,只是直接显示出来了。
SlideToggle可以用于表格行,但有点麻烦。
如果你的表格行高度大于最小高度,像这样:
<tr height="30%">
然后 slidetoggle 会平滑地向下滑动,直到达到其最小高度......然后它会立即消失,就像你使用了
$("#tr").hide();
我已经在 http://jsfiddle.net/BU28E/1/ 上创建了一个 jsfiddle 来演示这个问题。
对你来说更好的解决方法可能是使用由 div 组成的表格。 div 将非常平滑地向上滑动。 我创建了另一个 jsfiddle 来演示这个解决方案,网址为http://jsfiddle.net/BU28E/2/
我的做法是在行中放置一个单独的DIV,并将TR和TD的padding设置为零。然后我可以切换滑动DIV而不是行:
<table>
<tr style="padding: 0">
<td style="padding: 0">
<div id="slideme" style="display: none">
</td>
</tr>
</table>
$("#slideme").slideToggle();
很棒。如果需要的话,我认为你可以在每列中放置一个DIV,并同时滑动它们。
我不知道这种解决方法是否被认为是一种有效的方式,但它对我来说起作用了:
假设你想slideUp一个表格的第一行(这段代码将slideUp标题):
$('table tr').first().children().slideUp();
尝试使用
$("#tr").fadeToggle(1000)
实现类似效果的方法
display:none;
,然后在该中添加一个,其colspan
等于您的表格具有的列数,并且该中还设置了一个div
,其也被设置为display:none
来实现此操作。
您想要滑动的行中的所有内容都放入上述提到的
下面的代码片段展示了这一过程。
$(".accordion-row").on("click",
function() {
var accordionRow = $(this).next(".accordion");
if (!accordionRow.is(":visible")) {
accordionRow.show().find(".accordion-content").slideDown();
} else {
accordionRow.find(".accordion-content").slideUp(function() {
if (!$(this).is(':visible')) {
accordionRow.hide();
}
});
}
});
.accordion-row {
cursor: pointer;
}
.accordion {
display: none;
width: 100%;
}
.accordion-content {
display: none;
}
/* Only used to remove undeeded padding added by bootstrap */
table.table.table-hover>tbody>tr>td {
padding: 0;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-hover">
<thead>
<tr>
<th>
th1
</th>
<th>
th2
</th>
<th>
th3
</th>
</tr>
</thead>
<tbody>
<tr class="accordion-row">
<td>
tr1 td1
</td>
<td>
tr1 td2
</td>
<td>
tr1 td3
</td>
</tr>
<tr class="accordion">
<td colspan="3">
<div class="accordion-content">
tr1 accordion-content
</div>
</td>
</tr>
<tr class="accordion-row">
<td>
tr2 td1
</td>
<td>
tr2 td2
</td>
<td>
tr2 td3
</td>
</tr>
<tr class=" accordion">
<td colspan="3">
<div class="accordion-content">
tr2 accordion-content
</div>
</td>
</tr>
</tbody>
</table>
$("button").click(function(){
$('#1').slideUp({
duration: 1500,
step: function(){
var $this = $(this);
var fontSize = parseInt($this.css("font-size"), 10);
// if the real and css heights differ, decrease the font size until they match
while(!sameHeight(this) && fontSize > 0){
$this.css("font-size", --fontSize);
}
}
});
});
function sameHeight(el){
var cssHeight = el.style.height;
cssHeight = parseFloat(cssHeight.substring(0,cssHeight.length-2));
var realHeight = $(el).innerHeight();
return isNaN(cssHeight) || realHeight - cssHeight < 2;
}
< 2
可能需要根据您的边框(以及可能的其他因素)进行调整。此外,这仅演示了隐藏内容的方法。如果要实现字体大小随着行向下滑动而增大,需要采用类似的方法。这更像是一个概念证明。嗨,这将会运行得很顺畅。
const slideTr = (".table-row");
if ($(slideTr).css("display") == "none") {
$(slideTr).slideDown("slow");
$(slideTr).find("td").contents().slideDown("slow");
} else {
$(slideTr).find("td").contents().slideUp("slow");
$(slideTr).slideUp("slow");
}
编辑:尝试了Jonatan的答案后,他的方法看起来更加简洁。
这里我有一个带有类view-converters
的表格行,当单击时,将显示/隐藏所有具有类TCConverters
的div。
我的行看起来像这样:
<tr><td><div class="TCConverters"><input type="button" value="b1"></div></td></tr>
<tr><td><div class="TCConverters"><input type="button" value="b2"></div></td></tr>
<tr><td><div class="TCConverters"><input type="button" value="b3"></div></td></tr>
<tr><td><div class="TCConverters"><input type="button" value="b4"></div></td></tr>
view-converters
时运行的代码。$(".view-converters").click(function() {
if(!$(".TCConverters:first").is(":visible")) {
$(".TCConverters").parent().parent().show();
}
$(".TCConverters").slideToggle(200,function() {
if(!$(this).is(":visible")) {
$(this).parent().parent().hide();
}
});
});
它看起来像这样:
翻译:
这里有一个带有 view-converters
类的表格行,当点击它时,会显示/隐藏所有带有 TCConverters
类的行:
您可以通过更改hacky
初始值和每个.each
中的增量来调整速度。
这不像滑动开关一样漂亮地拉伸行,但该效果对我的目的起作用。
如果你真的想要压缩行高度,你可以用 setTimeout
替换 param.hide()
,以使高度缩小到0。
$(".view-converters").click(function() {
var hacky = 50;
if($('.TCConverters:first').is(':visible')) {
$('.TCConverters').each(function() {
var param = $(this);
setTimeout(function() { param.hide(); },hacky);
hacky += 5;
});
}
else {
$($('.TCConverters').get().reverse()).each(function() {
var param = $(this);
setTimeout(function() { param.show(); },hacky);
hacky += 5;
});
}
});
它看起来像这样:
您可以滑动切换表格中的行。请尝试一下。
表格的 HTML 代码:
<a href="#" >ok</a>
<table id="tbl">
<tr><td>1</td><td>2</td></tr>
<tr><td>3</td><td>4</td></tr>
<tr><td>6</td><td>5</td></tr>
</table>
jQuery代码在这里,点击“a” href时,表格将被切换。
$(document).ready(function() {
$("a").click(function() {
$('table tr td').slideToggle("medium");
});
});
对于特定索引行,您可以使用 $('table tr:eq(rowindex) td')
。