2013-06-27 55 views
18

我有很長的動態生成的列表中的每個具有相同的類標識符屬性和數據屬性類似下面的代碼:JQuery的獲取所有數據從列表

<ul> 
    <li class="list" data-id="123">One</li> 
    <li class="list" data-id="124">Two</li> 
    <li class="list" data-id="125">Three</li> 
    <li class="list" data-id="126">Four</li> 
    .....etc 
</ul> 

什麼,我想做到的,是讓所有data-id值和它們的格式如下:

123|124|125|126....etc 

這將通過AJAX來然後傳遞到一個頁面,該ID在數據庫中檢查是否存在。

var delimited_data=""; 
$('.list').each(function(){ 
    delimited_data+=$(this).data('id')+"|"; 
}); 
console.log(delimited_data); 

的原因,我問這個問題是我活的系統,10分鐘後自動部署列表中的列不同用戶的項目上工作。我只需要確保代碼是正確的方式:)

我還需要檢查是否有頁上沒有.list類(即 - 無法執行查詢)是否delimited_data將完全空的,我很確定它會是。

有沒有比在這種情況下使用.each()更好的方法,因爲我發現它可以相當緩慢地銘記上述函數將每30秒運行一次。

+1

要檢查是否存在'.list',請檢查'.list'的長度。 –

回答

46

您可以使用.map返回數組:

var dataList = $(".list").map(function() { 
    return $(this).data("id"); 
}).get(); 

console.log(dataList.join("|")); 

演示:http://jsfiddle.net/RPpXu/

+0

這樣做看起來相當簡單 - 不使用.map()之前) – Sideshow

+0

喜歡'.map'函數,多次幫助! – tymeJV

+0

這對我來說是最好的答案。乾杯。 –

5

使用此:

var array = []; 

$('li.list').each(function() { 
    array.push($(this).data('id')); 
}) 

var joined = array.join('|'); 
1

不回答你的問題,但是這是我結束了在這個頁面上搜索,雖然它會幫助別人:-)

var arrayOfObj = $('input').map(function() { 

    return { 
      name : $(this).attr('name'), 
      data : $(this).data('options'), 
      value : $(this).val(), 
      id : $(this).attr('id') 
     } 

}).get(); 
console.log(arrayOfObj) 

這將返回一個模仿輸入的對象數組
乾杯!

相關問題