2016-11-25 77 views
0

我使用的datatablesFixedColumns应用于前四列。列和所有单元格值从json动态加载,我想申请一些功能:Datatables:将工具提示添加到动态加载的所有单元格

1)工具栏提示栏标题。我已通过添加data-html="true" data-toggle="tooltip" title= ...

2)三列标题:现在在我的列标题中我有三个值,如果可能我希望有三行标题但我不知道如何更改str成列迭代。

3)如果单元格很长,请将其值减小。我加入这个代码的HTML页面

<style> 
#slTable td { 
    white-space: nowrap; 
    text-overflow:ellipsis; 
    overflow: hidden; 
    max-width:1px; 
} 
</style> 

4)添加提示到每个单元格的值来显示所有的值,如果它是cutted.I已经遍历每个单元中的数据表初始化之后,但在第一行没有工具提示,页面很慢,当我将鼠标放在一个值上时,所有的单元格都会修改自己的尺寸来移动所有的表格。

这是实际的JavaScript代码:

var tableData; 
var tableName='#slTable'; 

$(document).ready(function(){ 

    jQuery.ajax({ 
     type : "GET", 
     url : "table/"+document.getElementById("hiddenIdCar").value, 
     headers: {'Content-Type': 'application/json'}, 
     beforeSend: function() { 
      waitingModal.showPleaseWait(); 
     }, 
     success: function(data,status,xhr){ 
      //No exception occurred 
      if(data.success){ 
       tableData = data.result; 
       $.each(tableData.columns, function (k, colObj) { 
        //check if parnName is not empty 
        if (colObj.parName) 
         var str = '<th data-html="true" data-toggle="tooltip" title="<b>NAME</b>:'+ colObj.parName+'<br><b>DESCRIPTION</b>:' + colObj.description + '<br><b>NOTE</b>: ' + colObj.note + '"></i>' + colObj.parName + '</th>'; 
        else 
         var str = '<th data-html="true" data-toggle="tooltip" title="<b>DESCRIPTION</b>:'+colObj.description+'<br><b>NOTE</b>: ' + colObj.note + '"></i>' + colObj.description + '</th>'; 
        $(str).appendTo(tableName+'>thead>tr'); 
       }); 
      } else { 
       waitingModal.hidePleaseWait(); 
       notifyMessage(data.result, 'error'); 
      } 
     }, 
     error: function(xhr,status,e){ 
      window.location.href = "/500"; 
     } 
    }).complete(function() { 
     //initialize datatable 
     if (! $.fn.DataTable.isDataTable(tableName)) { 
      var slTable = $(tableName).DataTable({ 
       scrollCollapse: true, 
       scrollX:  true, 
       scrollY:  '60vh', 
       paging:   false, 
       "data": tableData.data, 
       "columns": tableData.columns, 
       fixedColumns: { 
        leftColumns: 4 
       }, 
       "initComplete": function(settings){ 
        $('[data-toggle="tooltip"]').tooltip({ 
         container: 'body' 
        }); 
        //add timeout because otherwise user could see a too fast waiting modal 
        setTimeout(function(){ 
         waitingModal.hidePleaseWait(); 
        }, 1000);  
       } 
      }); 
     } 
     else { 
      slTable.ajax.url("table/"+document.getElementById("hiddenIdCar").value).load(); 
     } 

     //TOOLTIP test cell 
     $(tableName+ ' tbody td').each(function (k, cellObj){ 
      this.setAttribute('title', cellObj.innerText); 
      this.setAttribute('data-toggle', "tooltip"); 
     }); 
     /* Apply the tooltips */ 
     slTable.$('td').tooltip({ 
//   "delay": 0, 
//   "track": true, 
//   "fade": 250 
     }); 
    });  
}); 

该表具有300行和200列(也许我要切换到服务器侧处理)。 你能帮我吗?感谢

更新1: 我已经感动了所有的工具提示代码为initComplete和它的作品

"initComplete": function(settings){ 
       //TOOLTIP test cell 
       $(tableName+ ' tbody td').each(function (k, cellObj){ 
        this.setAttribute('title', cellObj.innerText); 
        this.setAttribute('data-toggle', "tooltip"); 
       }); 
       $('[data-toggle="tooltip"]').tooltip({ 
        container: 'body' 
       }); 
       //add timeout because otherwise user could see a too fast waiting modal 
       setTimeout(function(){ 
        waitingModal.hidePleaseWait(); 
       }, 1000);  
      } 

任何想法,大约三排头?

+0

引导工具提示? –

+0

是的,你可以在列循环中看到代码。 – luca

+0

你可以用虚拟数据制作小提琴吗? – sniels

回答

1

如果您运行此代码,则它会自动激活所有工具提示。你不必担心引用特定的。

$(function() { 
    $('[data-toggle="tooltip"]').tooltip() 
}) 
+0

对于单元格是的,但对于我必须指定容器的列:'body' – luca

1

问题是,你正试图初始化DataTablestooltips.complete回调AJAX的。很有可能您的success方法中的逻辑尚未完成,并且您试图在完整回调中应用Datatable和工具提示。我建议你将complete回调中的所有逻辑包装到一个函数中,并在$.each(tableData.columns循环后调用该函数。

+0

谢谢,现在提示工具提示。我必须将三行设置为标题 – luca