如何在现有JQuery数据表上使用HTML更新现有行
How to update an existing row with HTML on an existing JQuery Datatables?
我的html页面中有一个现有的jQuery dataTables对象。
我需要通过单击刷新按钮来更新数据表的第一个<tr>
上所有<td>
中的几个<a href>
元素,该按钮触发Ajax调用以检索JSON中的新数据。
<a href>
元素是用Ajax检索到的超链接动态构建的,因此我需要为每个<a href>
元素提供html。
<tr id="LoJXi76DH3" role="row" class="odd">
<td><a data-transition="pop" data-mini="true" data-position-to="window" data-rel="popup" href="#deleteThisRunModel" onclick="copyRunModelObjId("LoJXi76DH3");" title="Delete this job"><img width="16" height="16" src="css/img/Remove24.png"></a></td>
<td><span>LoJXi76DH3</span></td>
<td><span>500</span></td>
<td><span>Completed</span></td>
<td><span>Firstname Lastname</span></td>
<td><span>9/12/2015, 1:07:39 PM</span></td>
<td><span>9/12/2015, 1:18:47 PM</span></td>
<td><span>Successful</span><span> </span><a title="Details" class="my-tooltip-btn ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" data-transition="pop" data-rel="popup" href="#popupRMDetails_LoJXi76DH3">Details</a></td>
<td><a target="_blank" href="View.jsp?res=500&url=myImage.png">View</a><span> </span><a href="myServlet?action=exportForDownload&jobOID=LoJXi76DH3">Download</a></td>
</tr>
只是想知道我应该使用哪个函数/api来完成这项工作?
如果您想用全新或经过修改的<tr>
替换整个<tr>..</tr>
,可以执行以下操作。
首先在jQuery中找到要替换的行,可以使用一些id选择器,也可以通过事件的DOM遍历:
var $row = $(this).closest("tr")
假设您有一个全新的HTML行,您想用它来替换它。这可能来自页面上某个地方的AJAX调用,或者现有行的修改版本,或者只是直接的HTML:
var newRow = $("<tr> <td>1</td> <td>Bob</td> <td><i>23</i></td> <tr>
如果这是一个普通的HTML表,您可以这样做.replaceWith()
:
$row.replaceWith($(newRow))
Buuttt,那么DataTables不知道它,所以下次调用$dt.draw()
时,它会变回来。相反,您必须将新信息传递到DataTable中,方法是在DataTables中定位行,然后将新信息交给它。
row().data()
-data表示字符串值的数组,这些值是每个td
的innerHTML
因此,我们需要将上面的行转换为这样的内容:
["1","Bob","<i>23</i>"]
下面是一个将行转换为数据表数组的函数:
function TrToData(row) {
return $(row).find('td').map(function(i,el) {
return el.innerHTML;
}).get();
}
所以整个事情看起来是这样的:
$('.replace').click(function () {
var $row = $(this).closest("tr")
var newRow = $("#newRow").find("tr")[0].outerHTML
var newRowDataArray = TrToData(newRow)
$dt.row($row).data(newRowDataArray).draw();
});
jsFiddle中的演示
堆栈中的恶魔狙击手
$(function() {
// initialize table
var $dt = $('#example').DataTable({
paging: false,
bFilter: false,
bInfo: false
});
// add row
$('#addRow').click(function () {
//$dt.row.add( [1,2,3] ).draw();
var newRow = $("#newRow").find("tr")[0].outerHTML
$dt.row.add($(newRow)).draw();
});
// replace row
$('.replace').click(function () {
var $row = $(this).closest("tr")
var newRow = $("#newRow").find("tr")[0].outerHTML
var newRowDataArray = TrToData(newRow)
//$row.replaceWith($(newRow))
//data represents an array of string values that are the innerHTML of each td
$dt.row($row).data(newRowDataArray).draw();
});
function TrToData(row) {
return $(row).find('td').map(function(i,el) {
return el.innerHTML;
}).get();
}
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.12/css/jquery.dataTables.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.12/js/jquery.dataTables.js"></script>
<table id="example" class="display" cellspacing="0" >
<thead>
<tr>
<th>Hidden</th>
<th>Name</th>
<th>Age</th>
<th>Replace</th>
</tr>
</thead>
<tbody>
<tr>
<td>Line 1 <input type="hidden" value="1"/> </td>
<td>Bob <input type="hidden" value="Bob"/> </td>
<td><input type="text" value="18"/> </td>
<td><input type="button" value="Replace" class="replace"/> </td>
</tr>
</tbody>
</table>
<br/>
<button id="addRow">Add New Row</button>
<table id="newRow" style="display:none">
<tbody>
<tr >
<td>Line 2 <input type="hidden" value="2"/> </td>
<td>Ann <input type="hidden" value="Ann"/> </td>
<td><input type="text" value="21"/> </td>
<td><input type="button" value="Replace" class="replace"/> </td>
</tr>
</tbody>
</table>
您可以使用jQuery来更新指定的行。为此,您需要为每一行定义唯一的id。然后通过下面的id,您可以获得table元素的对象,并通过ajax调用对其进行更新。让我用代码解释一下。这里还展示了如何操作动态链接。
function updateJobStatus() {
$("#data-table tr.running").each(function() {
var obj = $(this);
var id = $(this).find('td:eq(0)').text();
//var id1 = $(this).attr('id');
$.ajax({
type: 'GET',
dataType: 'json',
url: 'ajaxGetPrintJob.html',
data: 'id=' + id,
success: function(responseData,textStatus) {
if (textStatus == 'success' && responseData.length > 0) {
var id = responseData[0].id;
var tagId = responseData[0].voterListTagId;
var createdBy = responseData[0].createdByName;
var locationType = responseData[0].locationType;
var totalJobCount = responseData[0].totalJobCount;
var successCount = responseData[0].successCount;
var failedCount = responseData[0].failedCount;
var status = responseData[0].status;
$(obj).find('td:eq(0)').html(id);
$(obj).find('td:eq(1)').html('<input name="app_id" id="row'+id+ '" type="checkbox" value="'+id+'" class="case"/>');
$(obj).find('td:eq(2)').html('<a href="showPrintJob.html?jobId='+id+'&tagId='+tagId+'&locationType='+locationType+'&w=1024&h=700&load=true&jobName='+responseData[0].name+'" class="popup">'+responseData[0].name+'</a>');
$(obj).find('td:eq(3)').html(createdBy);
$(obj).find('td:eq(4)').html(totalJobCount);
$(obj).find('td:eq(5)').html(successCount);
$(obj).find('td:eq(6)').html(failedCount);
$(obj).find('td:eq(7)').html(status);
}
}, error: function(responseData) {
unblockView();
}
});
});
setTimeout(updateJobStatus, 20000);
}
这里updateJobStatus()函数将通过ajax调用获取数据和操作每隔20秒触发一次。这里的数据表是指表id。
<table summary="search result" id="data-table" class="search-result" cellspacing="0" style="">
表格行应该像
<tr class="<c:if test="${loop.count % 2 !=0}"> odd-row </c:if> <c:if test="${result.status eq 'INITIALIZING'}"> running </c:if>" >
- $Scope变量在HTML中不更新,尽管在控制器中不断更新
- HTML动态更新滑块输入
- AngularJS$apply有时不会;当在highchart中使用click事件时,t触发更新{{}}中html标记中
- 用jQuery.html更新span内部html在IE中不起作用
- jquery html更新可以在电脑上使用,但不能在智能手机上使用
- 使用HTML更新JavaScript对象
- Angular.js:如何将数据从一个HTML更新到使用相同控制器的另一个HTML
- 简单的内部HTML更新不起作用
- 如何根据用户输入 HTML 更新多个 SPAN 元素
- 如何在现有JQuery数据表上使用HTML更新现有行
- 点击使用jQuery用HTML更新DIV
- 滚动条在使用$selector.html()更新内容后重置
- 从jquery ajax调用html更新多个元素
- HTML更新没有反映在AngularJS中
- 如何从HTML更新MySQL数据库
- 我正在尝试使用按钮创建一个动态HTML更新
- 不使用HTML 5更新查询字符串(没有重定向)
- 点击Sencha touch中html更新后新元素上的事件
- 使用Javascript/HTML更新两组值的按钮
- 使用Javascript从HTML更新MySQL数据