2013-09-11 2 views
2

Прежде всего, я не использую jQuery-UI, только последний jQuery!Как сериализовать все li # id внутри ul с помощью jquery.serialize()?

У меня есть следующий список:

<ul id="audio_list"> 
    <li id="trackid_1"></li> 
    <li id="trackid_5"></li> 
    <li id="trackid_2"></li> 
    <li id="trackid_4"></li> 
    <li id="trackid_3"></li> 
</ul> 

Теперь я хотел бы сериализации этот список и сохранить его как массив в переменной, например:

var myaudiotracks = jQuery('#audio_list').serialize(); 

Все, что я получаю пустой строка, конечно, потому что мне что-то не хватает или невозможно сериализовать списки только с помощью jQuery.

То, что я пытаюсь сделать, чтобы отправить эту переменную как массив в PHP скрипт, результат при размещении переменной должно быть:

trackid[] 1 
trackid[] 5 
trackid[] 2 
trackid[] 4 
trackid[] 3 

Любые идеи, как я могу получить к этому результату?

+1

В соответствии с тем, что я знаю. .serialize() работает для элементов формы, имеющих пару имя-значение. Но не уверен в этом. –

ответ

3

Попытка

var array = jQuery('#audio_list li').map(function(){ 
    return 'trackid[]=' + this.id.match(/(\d+)$/)[1] 
}).get() 
console.log(array.join('&')) 

Демонстрация: Fiddle

+0

Я поместил этот ответ в качестве правильного ответа, потому что он очень короткий, не используя каждую функцию цикла, и он повторно используется с другими идентификаторами, если это необходимо, если имена идентификаторов различаются. Большой! Благодаря! – lickmycode

1

serialize() - это кодирование набора элементов формы в виде строки для представления.

Попробуйте использовать .each() и цикл все li элементы внутри div:

$(document).ready(function(){ 
    var myaudiotracks = new Array(); 
    jQuery('#audio_list li').each(function(){ 
     myaudiotracks.push($(this).attr("id").split("trackid_")[1]); 
    }); 
    console.log(myaudiotracks); 
}); 

DEMO FIDDLE

0

вы не можете использовать JQuery сериализации функцию, как это, она работает только для элементов формы, так что если вы хотите получить результат, как это, попробуйте следующее:

<ul id="audio_list"> 
    <li id="trackid_1"><input type="hidden" name="trackid" value="1"></li> 
    <li id="trackid_5"><input type="hidden" name="trackid" value="5"></li> 
    <li id="trackid_2"><input type="hidden" name="trackid" value="2"></li> 
    <li id="trackid_4"><input type="hidden" name="trackid" value="4"></li> 
    <li id="trackid_3"><input type="hidden" name="trackid" value="3"></li> 

var myaudiotracks = jQuery('#audio_list li').serialize(); 
+0

с использованием 'name =" trackid "' даст вам только последний элемент. Используйте 'name =" trackid [] "вместо этого, если вы планируете использовать этот метод для сериализации данных – happymacarts

Смежные вопросы