2013-07-28 5 views
2

У меня есть приложение jquery, где я templating блок html, который содержит 3 текстовых поля. Мне нужно получить значения текстовых полей в определенном блоке. идентификаторы реплицируются во всех блоках.Jquery получить массив значений входных элементов внутри общего родителя

Пример кода

<div> 
    <div class="htmlBlock"> 
    <ul> 
     <li> 
     <input class="myInput1" type="text"> 
     <input class="myInput2" type="text"> 
     <input class="myInput3" type="text"> 
     </li> 
     <li> 
     <input class="myInput1" type="text"> 
     <input class="myInput2" type="text"> 
     <input class="myInput3" type="text"> 
     </li> 
     <li> 
     <input class="myInput1" type="text"> 
     <input class="myInput2" type="text"> 
     <input class="myInput3" type="text"> 
     </li> 
    </ul> 
    <button class="clickMe">Click to get values of this block</button> 
    </div> 
    <div class="htmlBlock"> 
    <ul> 
     <li> 
     <input class="myInput1" type="text"> 
     <input class="myInput2" type="text"> 
     <input class="myInput3" type="text"> 
     </li> 
    </ul> 
    <button class="clickMe">Click to get values of this block</button> 
</div> 
</div> 

При нажатии на кнопку .clickMe Я хочу вызвать $('.myInput').val() и получить значение только в пределах блока, что кнопка расположена.

ответ

2

Вы можете сделать следующее:

$('button.clickMe').on('click', function() { 
    var block = $(this).closest('.htmlBlock'); 
    var inputs = block.find('input[type="text"]'); 
    // .myInput1 values as an array. 
    var myInput1Vals = block.find('.myInput1').map(function() { 
     return this.value; 
    }); 
    // Do what you want to do 
}); 

Я не использовал $('.myInput').val(), так как у вас есть разные классы на каждом входе. Но вы можете пройти через них, делать с ними все, что хотите, и все они будут локализованы внутри этого блока.

jsfiddle

Этот fiddle преобразует его в массив, который не является объектом, используя JQuery .toArray() после .map.

+0

спасибо. Как получить значения по имени класса. Я изменил пример, чтобы быть более точным в ситуации. Я хотел бы получить массив .myInput1 – Rob

+0

, что последний возвращает пустой массив. этот первый работал, когда я изменил его на var block = $ (this) .closest ('. paramList'); block.find (paramVal.push ($ ('. CustomParamValue'). Val())); но он нашел только одно значение, когда было несколько – Rob

+0

. Я просто добавил ссылку на скрипку, которая показывает, что myInput1Vals не пуст. Они заставляют вас возвращать только одно значение, потому что jQuery возвращает только «val()» из первого в наборе. – kalley

1
$('button.clickMe').on('click', function() { 
    var values = $(this).closest('.htmlBlock').find('input[type="text"]').map(function(){ 
        return this.value; 
       }).get(); 
}); 
Смежные вопросы