Javascript 数据表赢得';t在没有事先通知()的情况下转换HTML表

Javascript 数据表赢得';t在没有事先通知()的情况下转换HTML表,javascript,jquery,datatables,Javascript,Jquery,Datatables,我正在构建一个页面,通过Ajax调用检索.csv文件,并将值加载到HTML表中。我在$(document.ready(function(){ltm.init();})中调用它调用 它在CSV文件的行上循环,并在javascript变量中构造一个HTML表,然后使用$('#myTable').HTML(table_data)将该表交给DOM。下一个函数,ltm.convertTableToDataTable()使用$(“#myTable”).DataTable()将其转换为简单的DataTable

我正在构建一个页面,通过Ajax调用检索.csv文件,并将值加载到HTML表中。我在
$(document.ready(function(){ltm.init();})中调用它调用

它在CSV文件的行上循环,并在javascript变量中构造一个HTML表,然后使用
$('#myTable').HTML(table_data)
将该表交给DOM。下一个函数,
ltm.convertTableToDataTable()
使用
$(“#myTable”).DataTable()将其转换为简单的DataTable。但是,它没有开火。我添加了一个按钮来调用
convertTableToDataTable()
函数,当我单击它时,它工作正常,DataTable功能齐全

如果我在convertTableToDataTable中紧靠
$('#myTable').DataTable()
前面放置了一个
警报()
,则会显示警报,并且表会正确转换。如果在.DataTable()调用之后将警报移动到,则会显示警报,并且该表不会转换

我试过使用
setTimeout($('#myTable').DataTable(),5000)
在.DataTable()调用之前引入延迟,但这也不起作用

在没有警报的情况下,我如何将其加载到数据中并在页面上创建DataTable对象?

下面是我的泛化javascript代码片段:
var ltm={
//局部变量
URLCVS:'myData.csv',
init:function(){
ltm.loadCSVDataInTable();
//警报('convertTableToDataTable已触发!');
ltm.convertTableToDataTable();
//绑定单击事件
$('#btnLoadCSVData')。单击(函数(){
ltm.loadCSVDataInTable();
});
$('#btnMakeDataTable')。单击(函数(){
ltm.convertTableToDataTable();
});
},
LoadCSVDataInTable:函数(){
//URL包含.csv文件。文件的第一行是列标题。
$.ajax({
url:ltm.urlcv,
数据类型:“文本”,
成功:功能(csvData){
var my_data=csvData.split(/\r?\n | \r/);
//var表_start='';
var表_start='';
var表_end=“”;
var表\u head\u start=“”;
var表头端=“”;
var表头=“”;
var表_foot_start='';
var表\u英尺\u端=“”;
var表格\u正文\u开始=“”;
var表体端=“”;
变量表_行=“”;
var表_数据=“”;
对于(var intRow=0;intRow 0){//优雅地处理空行
var cell_data=my_data[intRow]。拆分(“,”;
var blnLoadRow=真;
if([我想过滤掉行的某些条件]){
blnLoadRow=false;
}
如果(blnLoadRow){
var thisRow=$('#templateDataRow').html();
//如果不剥离所有标签,就无法将内容放入DIV
//此外,即使我没有放入一个,DOM也会创建一个,所以也将其去掉。
thisRow=thisRow.replace(“,”);
thisRow=thisRow.replace(“,”);
thisRow=thisRow.replace(“,”);
thisRow=thisRow.replace(“,”);
thisRow=thisRow.replace(“\uuuu MYFIELD0\uuuuu”,单元格数据[0]);
thisRow=thisRow.replace(“\uuuuMyField1\uuuuuuuuuuuuu”,单元格数据[1]);
thisRow=thisRow.replace(“\uuuuMyField2\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”,单元格数据[2]);
thisRow=thisRow.replace(“\uuuu MYFIELD3\uuuuu”,单元格数据[3]);
thisRow=thisRow.replace(“\uuuu MYFIELD4\uuuuu”,单元格数据[4]);
表_行+=此行;
}
}
}
}
table_data=table_start;
表头数据+=表头开始+表头+表头结束;
table_data+=table_foot_start+table_head+table_foot_end;
table_data+=table_body_start+table_rows+table_body_end;
table_data+=table_end;
$('divMyTable').html(表格数据);
}
});
},
convertTableToDataTable:函数(){
//警报('convertTableToDataTable已激发-之前!');
$('#myTable').DataTable();
//警报(“convertTableToDataTable已激发!-之后”);
},
lastFunction:function(){}//前面所有的右大括号后面都应该有一个逗号
}//ltm对象的结尾。
更改

$('#divMyTable').html(table_data);

这将确保加载html时触发DataTable

并移除

convertTableToDataTable: function() {
        //alert('convertTableToDataTable fired - BEFORE!');
        $('#myTable').DataTable();
        //alert('convertTableToDataTable fired! - AFTER');
    },
我看到您正在调用
$('divMyTable').html(table\u数据),但在其他地方您引用了$(“#myTable”)`,这是否重要?
convertTableToDataTable: function() {
        //alert('convertTableToDataTable fired - BEFORE!');
        $('#myTable').DataTable();
        //alert('convertTableToDataTable fired! - AFTER');
    },