2014-04-28 42 views
0

我想獲取一個表格的內容到一個數組,其中每個tr具有html5自定義數據屬性,這些是插入到數組中的值,其中行分別是陣列。試圖陣列表格數據attr內容使用每個

我曾嘗試以下: JSfiddle

var data = Array(); 

$("table tr").each(function(i, v){ 
    data[i] = Array(); 
    $(this).data().each(function(ii, vv){ 
     data[i][ii] = $(this).text(); 
    }); 
}); 

alert(data); 

然而,這是行不通的。

+1

這麼多錯誤:不能調用'數據()'不帶參數,你必須提供屬性名稱。它返回一個字符串,而不是一個數組。 '.text()'只適用於DOM元素的jQuery對象,而不是普通的對象。 – Barmar

+0

@Barmar其實你可以不帶參數調用'data()',[這裏是它的文檔](http://api.jquery.com/data/#data) –

+0

另外,你不能初始化一個數組用'Array()'它的'new Array()'或'[]',後者是首選。 –

回答

1

我想我現在明白你的問題,從對TRS數據屬性,並將它們添加到陣列中的以下代碼獲取的值。

var data = []; 

$("table tr").each(function (i, v) { 
    data[i] = []; 
    var count = 0; 
    var item = $(this).data(); 
    for(var propertyName in item) { 
     data[i][count] = item[propertyName]; 
     count++; 
    } 
}); 
console.log(data); 

小提琴:http://jsfiddle.net/KyleMuir/vG36j/13/

+0

當用'for-in'循環時,你應該測試'hasOwnProperty'跳過繼承的屬性。 – Barmar

+0

同意,但對象是'$(this).data()',所以我不明白它將如何繼承任何屬性? –

+0

正是我想要實現的。我已經嘗試過6種不同的方式,但這是我準備實現的目標。謝謝 – Derple

1

你可能想要一個對象,而不是一個數組。這裏是你應該怎麼可能去了解它:

var data = []; 

$("table tr").each(function(i, v){ 
    data[i] = {}; 
    $.each($(this).data(), function(ii, vv) { 
     data[i][ii] = vv; 
    }); 
}); 
1

data()返回一個對象,不是一個數組,所以你不能在它與each()方法進行迭代。你可以使用$.each來遍歷它,但是不需要這樣做 - 你可以直接將整個對象直接放入data[i]

var data = []; 

$("table tr").each(function(i, v){ 
    data[i] = $(this).data(); 
}); 

console.log(data); 

我以前console.log()末,因爲alert()不顯示對象的內容。

DEMO

+0

'.data()'返回一個對象,你可以通過它來枚舉屬性。 –

+0

這不就是我說的嗎? '.data()。each()'不能用於對象,它只能用於數組。 '$ .each($(this).data(),...)'會起作用。 – Barmar

相關問題