2013-03-23 65 views
0

我使用DataTable脚本轻松地从我的数据库中抽取数据进行排序,并使用其内置的功能,使显示/隐藏某些列DataTable的显示/隐藏功能:更改链接文本时使用

 function fnShowHide(iCol) { 
     var oTable = $('#inventory').dataTable(); 
     var bVis = oTable.fnSettings().aoColumns[iCol].bVisible; 
     oTable.fnSetColumnVis(iCol, bVis ? false : true); 
    } 
<a href="javascript:void(0);" class="cost" onclick="fnShowHide(10);">Cost</a> 

问题是,我如何做到这一点,如果列隐藏,链接文本显示“显示成本”,如果列可见,说它“隐藏成本”?

回答

1

也许这会工作。看起来您正在将列索引分配给onclick属性,可能会将一个id添加到要用作访问者的锚;是这样的:

function fnShowHide(iCol) { 
     var oTable = $('#inventory').dataTable(); 
     var bVis = oTable.fnSettings().aoColumns[iCol].bVisible; 
     oTable.fnSetColumnVis(iCol, bVis ? false : true); 

     //--anchor text modifier 
     var $anchor = $('#anchor_' + iCol); 
     var albl = $anchor.text(); 
     if(albl.indexOf('Show')!=-1 || albl.indexOf('Hide')!=-1){ 
      albl = (bVis)? albl.replace('Show', 'Hide') : albl.replace('Hide', 'Show'); 
     }else{ 
      albl = (bVis)? 'Hide ' + albl : 'Show ' + albl; 
     } 
     $anchor.text(albl) 
    } 
<a href="javascript:void(0);" class="cost" 
id="anchor_10" onclick="fnShowHide(10);">Cost</a> 

我在我的语法有错误:变化应用到下面的行应该一代产量您正在寻找的结果:

if(albl.indexOf('Show')!=-1 || albl.indexOf('Hide')!=-1){ 
/*this is affected line*/ albl = (bVis)? albl.replace('Show', 'Hide') : albl.replace('Hide', 'Show'); 
    }else{ 
+0

它确实改变文本“隐藏”,但如果我再次点击它,它不会切换到“显示” – 2013-03-23 03:29:05

+0

bVis是否返回布尔值?如果不是,那可能是问题。如果你还没有,我会建议尝试使用萤火虫,而console.dir([bVis,albl]);在触发时显示数值。 – bphillips 2013-03-23 16:00:48