2013-04-22 54 views
0

我正在處理一個巨大的自定義數據表函數,我有一個簡單的問題,我需要將'sType'設置爲所有'aoColumns',但這些表是動態的,所以他們可能有6或10列,我不能找到一個辦法的事,我已經嘗試以下選項:將sType設置爲動態jQuery數據表上的所有aColumns

//doesn't work 
"aoColumns": [{"sType":"string", "aTargets": ["_all"]}], 

//this works, but its not dynamic :/ 
"aoColumns": [{"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}], 

,我不能做到這一點使用服務器端

obs .:我有一個var列數

6 columns 
"aoColumns": [{"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}], 
10 columns 
"aoColumns": [{"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}, {"sType":"string"}], 

還是要謝謝你

+0

你最初建表在PHP? – dgig 2013-04-22 20:38:43

+0

是的,但只有thead和搜索輸入,使用ajax加載數據 – 2013-04-22 20:39:46

+0

在設置數據表值之前,計算您將使用php的列,然後使用while循環創建許多「{」sType「:」字符串「}」,如你所需。那有意義嗎? – dgig 2013-04-22 20:43:37

回答

1

服務器端PHP:嗯,如果你是PHP創建表,那麼你應該能夠建立一個字符串,所有可以插入javacript所需的組的部分。

<?php 
$colnum = 6; 
$i = 1; 

$aocolumns = array(); 

while($i <= $colnum){ 
    $aocolumns[] = '{"sType":"string"}'; 
    $i++; 
} 

$aocolumns = join(",",$aocolumns); 
$aocolumns = '[' . $aocolumns . ']'; 

?> 

然後把它像

"aoColumns": <?=$aocolumns?> 

的Javascript:假設你得到的列從阿賈克斯稱爲「COLS」一個數組回來了,你可以試試這個for循環。 :

var aocolumns = []; 
for(i in cols){ 
    var ao = {"sType":"string"}; 
    aocolumns.push(ao); 
} 
alert(aocolumns); 
+0

返回空白.. – 2013-04-22 20:57:24

+0

對不起,我做了一個編輯。你能提供ajax調用返回的字符串嗎? – dgig 2013-04-22 20:58:24

+0

對不起,只有行是由ajax獲得,列是固定的,但它可以根據不同的表,看看這個問題,我做了一個編輯 – 2013-04-22 21:01:27

0

我解決了這個利用parseJSON和將字符串轉換成JSON:

aoColumns = '[{"sType":"string"}'; 
i = 0; 
tc = totalCol; 
while(i<tc){ 
    aoColumns += ','; 
    aoColumns += '{"sType":"string"}'; 
    i++; 
} 
aoColumns += ']'; 

// if totalCol == 3 then 
// aoColumns will return [{"sType":"string"}, {"sType":"string"}, {"sType":"string"}] 
aoColumns = $.parseJSON(aoColumns); 

這個工作!

1

其他答案比他們需要更復雜。

的JavaScript版本:

var i, aoColumns = []; 
for (i = 0; i < totalCol; i++) { 
    aoColumns.push({ 'sType': 'string' }); 
} 

的ECMAScript 6版本:

aoColumns.fill({ 'sType': 'string' }, 0, totalCol) 

這可能會在你的瀏覽器中運行,如果填充工具存在於你使用任何圖書館的JavaScript array.fill命令。

PHP(服務器端)版本:

<?php 
// array('stype' => "string"); for old PHP 
$columns = 6; 
$aoColumns = array_fill(0, $columns, [ 'stype' => 'string' ]); 
print json_encode($aoColumns); 
?> 
+0

真棒,今天我學到了一些新東西! :D – 2014-07-10 15:01:02

+0

在幾周的時間裏,你可以通過類似'aoColumns.fill({'sType':'string'},0,totalCol)'來初始化。 (即將在ECMAScript 6中發佈) – vogomatix 2014-07-10 15:15:32

+1

已添加PHP版本:) – vogomatix 2015-12-09 14:50:25