- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试让scrollTo插件与我正在做的事情正常工作。当您单击 table 上的绿色加号按钮时,它会打开一个 div 我试图让滚动条自动滚动以显示 div,以便在列表的下方您将自动看到详细信息,而不是像它们一样隐藏它们现在。有人可以帮助我吗?我使用 dataTables 滚动器进行了此操作,但该插件破坏了我需要的所有其他功能。
https://jsfiddle.net/nnb97rh9/7/
/* Formatting function for row details - modify as you need */
function format ( d ) {
// `d` is the original data object for the row
return '<div class="slider">'+
'<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
'<tr>'+
'<td>Full name:</td>'+
'<td>'+d.name+'</td>'+
'</tr>'+
'<tr>'+
'<td>Extension number:</td>'+
'<td>'+d.extn+'</td>'+
'</tr>'+
'<tr>'+
'<td>Extra info:</td>'+
'<td>And any further details here (images etc)...</td>'+
'</tr>'+
'</table>'+
'</div>';
}
$(document).ready(function() {
var table = $('#example').DataTable( {
"ajax": 'https://api.myjson.com/bins/16lp6',
scrollY: 250,
deferRender: true,
scroller: true,
scrollCollapse: true,
"columns": [
{
"class": 'details-control',
"orderable": false,
"data": null,
"defaultContent": ''
},
{ "data": "name" },
{ "data": "position" },
{ "data": "office" },
{ "data": "salary" },
{ "data": "extn", "visible": false }
],
"order": [[1, 'asc']]
} );
// Add event listener for opening and closing details
$('table.display').on('click', 'tr', function() {
var tr = $(this).closest('tr');
var row = table.row( tr );
var i = $(this).index();
var target = $("table.display tr").eq( tr.index() );
var duration = 300;
if ( row.child.isShown() ) {
// This row is already open - close it
$('div.slider', row.child()).slideUp( function () {
row.child.hide();
tr.removeClass('shown');
} );
}
else {
// Open this row
row.child( format(row.data()), 'no-padding' ).show();
tr.addClass('shown');
$('div.slider', row.child()).slideDown();
$('div.slider').scrollTo(target, duration);
}
} );
} );
[![在此处输入图像描述][1]][1]
最佳答案
我已经在没有滚动插件(这会带来一些严重问题)的情况下通过 $(document).ready()
中的简单 jQuery 代码实现了这一点,如下所示:
$(function () {
$('#yourTableId').on('draw.dt', function () {
$(".dataTables_scrollBody")
.scrollTop($(".dataTables_scrollBody").scrollTop() + $("#yourTrId").position().top - 0);
});
});
事实上,您可以给出任何元素的位置,而不是 tr
,但我一直为每个 tr
使用唯一的 id。您可能需要添加/减去一些数字来手动调整滚动。
编辑:在您的情况下,您不应在 $('#example').on 中设置
创建表格时,因为 $(".dataTables_scrollBody").scrollTop
('draw.dt', ...)tbody
(变为 div.dataTables_scrollBody
)尚不可用。
我将 $(".dataTables_scrollBody").scrollTop
放置在您的事件监听器中以获取打开和关闭详细信息,并且它工作正常: https://jsfiddle.net/nnb97rh9/14/ .
// Add event listener for opening and closing details
$('table.display').on('click', 'tr', function() {
...
// Open this row
...
$(".dataTables_scrollBody")
.scrollTop($(".dataTables_scrollBody").scrollTop() + $(".slider").position().top - 0);
});
唯一的问题是您正在使用 .slider
类来设置不唯一的 scrollTop
,并且如果之前打开了一个详细信息行,并且打开了另一个详细信息行行,div 滚动到第一个 .slider
。因此,建议在这里使用 Id 或唯一的东西。
希望这有帮助,祝你好运......
编辑2:就像您的情况一样,数据是从服务器端获取的,并且您没有生成的 HTML 元素的唯一 ID。然后,DataTables 作者提出了一个解决方案:您可以从服务器端发送唯一的 id,将其分配给数据本身中的 tr
元素:
{
...
"data": [
{
"DT_RowId": "row_5",
"first_name": "Airi",
...
},
...
}
https://www.datatables.net/examples/server_side/ids.html
编辑 3:或者,如果无法从服务器端编辑数据,只需将以下代码添加到 DataTable 初始化中:
$('#example').DataTable({
...
fnCreatedRow: function( nRow, aData, iDataIndex ) {
$(nRow).attr('id','tr_' + iDataIndex);
}
});
引用:Add html attribute to datatable row
这样每个tr
都会获得一个唯一的ID,并且可以滚动到它---工作 fiddle :https://jsfiddle.net/nnb97rh9/21/
关于带有scrollTo插件的jQuery DataTables自动看到div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33548489/
该插件的绝大多数文档表明您可以使用 对其进行初始化 $('#example').dataTable(); 但是http://www.datatables.net/examples/api/multi_
我有一个 SQL 查询,它获取一些数据(dbtable 表中的语言列)。查询使用 GROUP_CONCAT,因此一个单元格有多个结果,例如 "Ajax, jQuery, HTML, CSS". 我想要
我有一个由 jQuery DataTables 增强的动态表,它显示一个与此类似的自定义对象 example . JSON: { "data": [ { "name": "Ti
我有两个数据表。首先是 DataTable NameAddressPhones = new DataTable(); 具有三列姓名、地址和电话号码。但我只想要两列姓名和地址数据,所以我想将这些列(包含
有没有办法将“处理...”语言放在 DataTable 对象的顶部而不是垂直中间?如果我有一张长 table ,它会隐藏在页面之外,因为它的默认位置在中间。 $('#example').dataTab
当我们向 DataTables 添加自定义过滤器时: $.fn.dataTable.ext.search.push(function(settings, data, dataIndex) { ..
我可以更改 dataTables 中搜索文本字段的宽度吗? 我现在正在编写以下代码,但它不起作用。 $('#example').dataTable() .columnFilter(
使用 DataTables plugin 时 如何使分页和 Showing 1 to 8 of 8 entries 出现在顶部而不是底部? 谢谢 最佳答案 每个数据表控件都以唯一的 id 命名计划之后
Angular 版本:6.0.4 ~ 节点版本:10.4.1 ~ NPM 版本:6.1.0 我看到这个问题被问了很多次,但没有回答。 关注这些后instructions to install angu
当单击外部按钮时,我正在尝试使用 DataTable(新版本)修改单元格值。我现在有以下内容: $(document).on('click', '.dropdown-menu li a', funct
引用:http://datatables.net/reference/api/page.info() 我正在尝试获取 ajax POST 生成的 jQuery DataTable 的当前分页信息。 使
以下对我有用: $('#datatable').on('page.dt', function() { alert("changed"); }); 每当我更改页面时,都会显示警报。但是如果我想警
我有一个 HTML 表,我在其中应用了 DataTables 函数。我使用表的第一行并将"template"类应用为我的模板行。然后选择此格式并使用 JSON feed 填充表中的所有行。问题是 Da
我有一个由 DataTables 1.10 驱动的表。过滤已打开。当我在下面谈论“做搜索”时,我指的是使用该表的过滤功能。 问题描述 关闭 stateSave 一切正常。但是,当 stateSave
看看这个例子,http://www.datatables.net/examples/api/multi_filter_select.html ,它使用 DataTable API 中的 columns
我正在使用 jQuery DataTables 在 spring 4.x 应用程序中创建一个报表页面来呈现报表。 通过 Jackson 消息转换器解析后,服务器返回以下对象。 { "data"
我在刷新 Primesfaces 的延迟加载数据表时遇到了一些问题。我正在使用 3.0.M4。 使用过滤器在您的示例中使用三个类。还尝试了仅使用延迟加载的示例,但随后未在 Controller 中重新
在 Blue Prism (BP) 中,有一种叫做 Collection 的东西,它基本上是 C# 中的 DataTable。在 BP 中,您可以在集合中拥有集合。我的问题是,您可以在 C# 的 Da
我正在使用 Flutter DataTables 来显示购物车中的商品列表。现在我想编辑任何选定行的数量。有没有办法获取用户点击的行信息? 以下是我的DataTable的完整代码: class _Da
我有一个关于 primefaces 数据表组件的问题。我想将 DataTable 变量绑定(bind)到 p:dataTable,以便我能够从支持 bean 以编程方式操作第一个、行、rowsPerP
我是一名优秀的程序员,十分优秀!