2013-06-27 32 views
18

Tôi có một danh sách dài tạo động mỗi nhận dạng cùng lớp và thuộc tính dữ liệu tương tự như mã bên dưới:JQuery nhận được tất cả dữ liệu thuộc tính từ một danh sách

<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> 

những gì tôi đang cố gắng để đạt được là để có được tất cả các data-id giá trị và định dạng chúng trong như sau:

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

này sẽ được thông qua sau đó với trang thông qua ajax và id kiểm tra sự tồn tại trong một cơ sở dữ liệu.

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

Lý do tôi đặt câu hỏi này là tôi đang triển khai hệ thống trực tiếp tự động triển khai các mục trong cột danh sách cho những người dùng khác nhau sau 10 phút. Tôi chỉ cần chắc chắn rằng mã đang đi đúng hướng :)

Tôi cũng cần kiểm tra xem không có các lớp học .list trên trang (nghĩa là - không có cách nào để thực hiện truy vấn) cho dù delimited_data sẽ hoàn toàn không trống rỗng mà tôi khá chắc chắn nó sẽ được.

Có cách nào tốt hơn là sử dụng .each() trong trường hợp này vì tôi thấy có thể hơi chậm khi nhớ rằng chức năng trên sẽ được chạy sau mỗi 30 giây.

+1

Để kiểm tra sự tồn tại của '.list', hãy kiểm tra độ dài của' .list' –

Trả lời

46

Bạn có thể sử dụng .map để trả lại một mảng:

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

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

Demo: http://jsfiddle.net/RPpXu/

+0

điều này có vẻ khá gọn gàng để thực hiện việc này - không được sử dụng .map() trước) – Sideshow

+0

Yêu thích hàm '.map' , giúp nhiều lần! – tymeJV

+0

điều này là def câu trả lời tốt nhất cho tôi. cổ vũ. –

5

Sử dụng này:

var array = []; 

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

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

Không phải là câu trả lời cho câu hỏi của bạn, nhưng đây là những gì tôi đã kết thúc trên trang này để tìm kiếm và mặc dù nó sẽ giúp người khác :-)

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) 

Điều này trả về một mảng các đối tượng bắt chước đầu vào
Chúc mừng!

Các vấn đề liên quan