Получить все выбранные значения для каждого div с несколькими разделами с одинаковым именем класса

#javascript #jquery #select

#javascript #jquery #выберите

Вопрос:

Есть ли способ получить массив всех выбранных значений внутри div с определенным именем класса при наличии более чем одного div с одинаковым именем класса?

 <div class="mydiv">
<select name="first">
     <option value="1">One</option>
     <option value="2">Two</option>
</select>
<select name="second" ">
     <option value="1">One</option>
     <option value="2">Two</option>
</select> </div>

<div class="mydiv">
<select name="first">
     <option value="1">One</option>
     <option value="2">Two</option>
</select>
<select name="second" ">
     <option value="1">One</option>
     <option value="2">Two</option>
</select> </div>
  

Если я сделаю это: $(".mydiv").each(function (){ });

Я буду выполнять цикл (всего дважды, поскольку у меня есть два раздела с классом mydiv) через оба раздела, чего я и хочу. Теперь я хотел бы получить выбранные значения в каждом div для каждого выбора (первого и второго).

Ответ №1:

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

Далее предполагается, что вам нужен подмассив для каждого <div>

 let res = $('.mydiv').map(function(){
    return [$(this).find('select').map(function(){
        return $(this).val()
    }).get()]
}).get()

console.log(res)  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="mydiv">
  <select name="first">
    <option value="1" selected>One</option>
    <option value="2">Two</option>
  </select>
  <select name="second">
    <option value="1">One</option>
    <option value="2"  selected>Two</option>
  </select>
</div>

<div class="mydiv">
  <select name="first">
    <option value="1">One</option>
    <option value="2"  selected>Two</option>
  </select>
  <select name="second">
    <option value="1">One</option>
    <option value="2"  selected>Two</option>
  </select>
</div>  

Для плоского массива просто выполните :

 let res = $('.mydiv select').map(function(){
   return $(this).val();
}).get();
  

Комментарии:

1. Это именно то, чего я хотел достичь. Спасибо 🙂