我有一个加载的基本 HTML 表。结构因上传的 CSV 文件的内容而异。表格列需要是可拖动的(为此我使用了一个名为 Dragtable 的插件)。然后我有添加行和列的方法。添加列方法如下所示:
function addCol(tblId) {
var tblHeadObj = document.getElementById(tblId).tHead;
for (var h=0; h < tblHeadObj.rows.length; h++) {
var newTH = document.createElement('th');
tblHeadObj.rows[h].appendChild(newTH);
colCount = (tblHeadObj.rows[h].cells.length);
newTH.innerHTML = 'Col ' + colCount;
}
var tblBodyObj = document.getElementById(tblId).tBodies[0];
for (var i=0; i<tblBodyObj.rows.length; i++) {
var newCell = tblBodyObj.rows[i].insertCell(-1);
newCell.innerHTML = "*null*";
}
}
问题是当我添加一个新列时,我不能再拖动该列将其放置在不同的位置。我还有一个表标题的 onclick 处理程序,它允许用户在单击第 th 元素时删除一列。这也不适用于新添加的列。基本上,所有事件侦听器都不会添加到新列上。
我尝试隐藏和显示表格和页面,但不起作用。我想我需要一种刷新表格的方法,但找不到有效的方法。
像这样的东西:
var table = document.getElementById("grid");
table.refresh ();
有没有办法做到这一点?还是我添加列的方式有问题,这可能是未附加事件侦听器的原因?
编辑
删除列方法如下:(使用适当的事件委托编辑)这解决了删除列方法的问题。我仍然无法拖动和排序新列
$("table").delegate("th:not(:first)", "click", function() {
var index = this.cellIndex;
$(this).closest('table').find('tr').each(function() {
this.removeChild(this.cells[ index ]);
});
}
关于 Dragtable 列排序,我只是将可拖动类添加到我的表中。我不确定事件侦听器的外观:
<table id = "grid" class="draggable"></table>