2013-06-27 19 views
18

Mam długo dynamicznie generowaną listę każdy z tym samym identyfikatorem klasy i atrybut danych podobny do poniższego kodu:JQuery uzyskać wszystkie dane atrybuty z listy

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

co próbuję osiągnąć to, aby uzyskać wszystkie wartości data-id i formatować je w sposób następujący:

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

ten będzie następnie przekazywane do strony za pośrednictwem ajax i ID użytkownika sprawdzane pod kątem istnienia w bazie danych.

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

Powodem Zadaję to pytanie jest to, że pracuję na żywo systemu, który automatycznie wdraża pozycji na liście kolumn do różnych użytkowników po 10 minutach. Po prostu muszę się upewnić, że kod idzie właściwą drogą :)

Muszę również sprawdzić, czy na stronie nie ma klas .list (tj. - nie ma sposobu na wykonanie zapytania), czy delimited_data będzie całkowicie pusty, co do którego jestem pewien.

Czy jest lepszy sposób niż użycie .each() w tym przypadku, ponieważ uważam, że może to być raczej powolne zapamiętywanie, że powyższa funkcja będzie uruchamiana co 30 sekund.

+1

Aby sprawdzić istnienie '.list', uruchom sprawdzenie długości' .list'A –

Odpowiedz

46

Można użyć .map wrócić tablicy:

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

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

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

+0

, wydaje się być to całkiem niezły sposób - nie jest używany .map() przed) – Sideshow

+0

Uwielbiam funkcję '.map' , pomaga wiele razy! – tymeJV

+0

to jest najlepsza odpowiedź dla mnie. Twoje zdrowie. –

5

użyj:

var array = []; 

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

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

Nie jest to odpowiedź na twoje pytanie, ale to, co skończyło się na tej stronie w poszukiwaniu i choć mogłoby to pomóc komuś innemu :-)

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) 

Powoduje wyświetlenie tablicy obiektów naśladujących wejście
Pozdrawiam!

Powiązane problemy