jQuery向上滑动表行
jQuery Slide Up Table Row
我正在构建一个自定义的jQuery插件,它允许用户实时删除表中的记录,以及其他许多事情。当记录被删除时,我希望被删除的表行的背景色变为红色,然后向上滑出视图。
下面是我的代码片段,它不做任何颜色变化动画,也不向上滑动行。然而,当应该是向上滑动的动画完成时,它确实删除了行。在检查下面的代码时需要知道的一些事情:
- "object"变量是对被点击并触发删除操作的对象的jQuery引用。
- object.parent().parent()对象是要删除的行。
- "deleteHighlight"CSS类包含将行变为红色的颜色。 "addClass"方法使用jQueryUI的"addClass"方法,而不是jQuery的。它允许动画效果和回调。
object.parent().parent().addClass('deleteHighlight', 1000, function() {
//Fold the table row
$(this).slideUp(1000, function() {
//Delete the old row
$(this).remove();
});
});
这是正在执行的HTML,没有什么特别的:
<table class="dataTable">
<thead>
<tr>
<th> </th>
<th>Title</th>
<th>Content Snapshot</th>
<th>Management</th>
</tr>
</thead>
<tbody>
<tr class="odd" id="11" name="1">
<td class="center width50"><a class="dragger"></a><a class="visibilityTrigger eyeShow"></a></td>
<td class="center width150">Title</td>
<td>
<div class="clipContainer">Content</div>
<div class="hide contentContainer">Content</div>
<div class="hide URLContainer">my-url</div>
</td>
<td class="center width75"><a class="edit"></a><a class="delete"></a></td>
</tr>
</tbody>
</table>
有人可以提供一个例子,我怎么能解决这个问题?
感谢您的宝贵时间。
我怀疑这部分是浏览器问题。您不应该真正针对<tr />
,因为浏览器对它们的解释不同。此外,它们的行为与块元素不同。
在这个例子中:http://jsfiddle.net/lnrb0b/3t3Na/1/你的代码部分在chrome中工作。<tr />
允许样式(不像在一些IE版本),但你不能动画它。如果你让它display:block
不用担心,但它有点垃圾作为一个表:)
在这个例子中:http://jsfiddle.net/lnrb0b/3t3Na/2/你会看到我已经动画了<td />
,但是它们几乎没有工作,而且速度很慢。
测试一下,同时我会试着想出一个解决方案。
处理幻灯片和删除的最优雅的方法是用div
包裹每个td
的内部内容,并同时减少td
的填充和div
的高度。看看这个简单的演示:http://jsfiddle.net/stamminator/z2fwdLdu/1/
当然可以!
将想要向上滑动的每个tr包装到div中,然后向上滑动这些div !
当然,你必须动画的填充(顶部和底部)每个td。
你可以在这里找到一个完整的例子:
http://jsfiddle.net/3t3Na/474/我的源代码摘录:
$('a').click(function(){
var object = $(this);
object.parent().parent().addClass('deleteHighlight', 1000, function() {
$(this).find('td').each(function(index, element) {
// Wrap each td inside the selected tr in a temporary div
$(this).wrapInner('<div class="td_wrapper"></div>');
// Fold the table row
$(this).parent().find('.td_wrapper').each(function(index, element) {
// SlideUp the wrapper div
$(this).slideUp();
// Remove padding from each td inside the selected tr
$(this).parent().parent().find('td').each(function(index, element) {
$(this).animate({
'padding-top': '0px',
'padding-bottom': '0px'
}, function() {
object.parentsUntil('tr').parent().remove();
});
});
});
addClass
不接受回调函数,因为它立即执行。我想你可能需要更像这样的东西。
object.parent().parent().addClass('deleteHighlight').slideUp(1000, function() {
$(this).remove();
});
动画表行的问题是,它有一个显示类型table-row,您不能简单地将其更改为display:block,因为这会使表结构混乱。你需要做的是把td内容包装在div中,就像在GianPero的答案中一样,然后向上滑动,行高会自动减少。这段代码是一个更简单的版本,可以处理包含th和td标记的行。
var fadeSpeed = 400;
var slideSpeed= 300;
var row = $(this).parent().parent();
row.fadeTo(fadeSpeed, 0.01, () => {
row.children('td, th')
.animate({ padding: 0 })
.wrapInner('<div />')
.children()
.slideUp(slideSpeed, () => { row.remove(); });
});
你可以修改fadesed和slidesed以毫秒为单位的任何持续时间,或者你可以将它们设置为jquery常量,如'slow'或'fast'
行动画代码,灵感来自于用jQuery动画表行
由于某种原因,带div的wrapInner()不适合我,所以我做了一个不太优雅的解决方案,在这里您将行的字体大小动画化,然后隐藏它,然后在行不可见的情况下将字体大小恢复为正常。
this.trs
.animate({ 'fontSize': '1px' }, 70)
.slideUp(1)
.animate({ 'fontSize': '12px'}, 10)
;
我用它在fullcalendar.js + scheduler.js日历视图中显示折叠/展开资源组。
function rowSlideUp(e,time) {
if (!time) { time = 200; }
var row = $(e).parents("tr").eq(0);
var height = row.innerHeight();
row.stop().css({transition:"none",opacity:1}).animate({opacity:0}, 120, function(){
var that = $(this);
$(this).find("td, th").css({padding:0}).html('<div class="animate-row" style="height:' + height + 'px;padding:0"> </div>');
$(this).find(".animate-row").slideUp(time, function(){
that.remove();
});
});
return false;
}
table {
border-collapse: collapse;
border-spacing: 0;
width:100%;
}
td,th {
padding:9px 12px;
font-size:16px;
background: #fff;
color:#000;
border: #DEE2EE 1px solid;
}
td {
background:#fff;
}
th {
background:#F3F5Fa;
}
td[tabindex] { cursor:pointer; outline:none; }
td[tabindex]:active { color:#ff3300; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<table>
<tr><th>Title</th><th>X</th></tr>
<tr><td>cell 1</td><td tabindex="-1" onclick="rowSlideUp(this,300)">click</td></tr>
<tr><td>cell 2</td><td tabindex="-1" onclick="rowSlideUp(this,300)">click</td></tr>
<tr><td>cell 3</td><td tabindex="-1" onclick="rowSlideUp(this,300)">click</td></tr>
</table>
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用jquery在填充自动完成的值后使文本框只读
- jQuery:循环一个具有不同超时值的循环
- 用程序搜索JQuery数据表中的文本
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jQuery匹配JSON对象的部分文本
- Jquery POST未填充数组
- JQuery使计数器每次更改时都会增加
- 如何在Angular2中使用jQuery插件
- 提高JQuery的性能
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JQuery合并了keyup和focusout两个函数
- 如何使用jQuery选择下拉列表的值
- 将PHP变量传递给jQuery时遇到问题
- jQuery UI自动完成突然停止工作
- 剑道网格jQuery动画()问题
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- jquery点击函数select&取消选择
- jquery试图按名称获取按钮位置