получить каждый дочерний элемент ('id') в массив или строку - PullRequest
10 голосов
/ 16 марта 2012

Мне нужно создать значение через запятую для скрытого ввода, созданного из серии идентификаторов div *

<div id="main">
<div id="A"></div>
<div id="B"></div>
<div id="C"></div>
</div>

<input type="hidden" id="children"/>

Я хочу использовать jquery, но у меня возникают проблемы с функцией

    function update_input(main){
        var array = new Array();

           $('#'+main).children('id').each(function(){
                 array.push($(this).attr('div'));  
           });         

        input_value = array.toString();
        $('#children').val(input_value);
    }

Это не правильно

Ответы [ 4 ]

16 голосов
/ 16 марта 2012
    $('div','#main').each(function(){
      array.push($(this).attr('id')); 
    });
11 голосов
/ 16 марта 2012

Вы можете использовать map -

​var arr = $("#main > div").map(function() {return this.id});
$('#children').val(arr.get().join(","));

Приведенный выше код основан на изменении вашего HTML-кода на -

<div id="main">
    <div id="A"></div>
    <div id="B"></div>
    <div id="C"></div>
</div>​

Функция map будет возвращать объект jQuery, содержащий идентификаторы каждого элемента div, содержащегося в элементе main. Вы можете вызвать функцию get(), чтобы превратить объект, возвращенный функцией map, в массив Javascript, а затем использовать функцию join, чтобы вернуть строку с разделителем-запятой.

Демо - http://jsfiddle.net/8tZXH/1

3 голосов
/ 16 марта 2012
var ids = $('#main > td').map(function(){
                 return this.id
           }).toArray(); 

$('#children').val(ids);
1 голос
/ 16 марта 2012

Вы, вероятно, хотите использовать children('div'), а не children('id')

...