Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вывести в select все данные class (https://javascript.ru/forum/misc/59383-vyvesti-v-select-vse-dannye-class.html)

djonA 08.11.2015 23:00

Вывести в select все данные class
 
На странице произвольное кол-во span с определенным class.
Мне надо при клике на select в него вывести все эти значения.

<span class="alliki">1</span>
<span class="alliki">2</span>
<span class="alliki">3</span>
<span class="alliki">4</span>

При клике на Select мне надо в него вставить все данные span, чтобы получилось вот так:
<select id="select" onclick="">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>


Не получается сделать, подскажите пжл как сделать

рони 08.11.2015 23:18

djonA,
и что мешает циклом обойти все span?

djonA 08.11.2015 23:22

прохожусь так:

$(".alliki").each(function() {}


а дальше как их вставить в select?

рони 08.11.2015 23:30

djonA,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script>
  window.addEventListener('DOMContentLoaded', function() {
  var nodes = document.querySelectorAll('.alliki'),
  select = document.querySelector('select');
  select.addEventListener('mousedown', function create() {
     [].forEach.call( nodes, function(span) {
            var val = span.innerHTML;
            var option = new Option(val, val);
            select.appendChild(option)
     });
  select.removeEventListener('mousedown',create)
  });
    });
  </script>
</head>

<body>
<span class="alliki">1</span>
<span class="alliki">2</span>
<span class="alliki">3</span>
<span class="alliki">4</span>


<select id="select" >
</select>


</body>

</html>

djonA 08.11.2015 23:50

а если не привязываться к select id='select', а вставлять во все select с class='select'

Т.е скажем у меня на странице не 1 а несколько select с class='select' как во всех них вставить:
<span class="alliki">1</span>
<span class="alliki">2</span>
<span class="alliki">3</span>
<span class="alliki">4</span>
<select class="select" >
</select>
<select class="select" >
</select>

при открытии 1 select вставлять во все select данные из span?

рони 08.11.2015 23:58

djonA,
добавить цикл по селектам и всё

рони 09.11.2015 00:11

djonA,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script>
  window.addEventListener('DOMContentLoaded', function() {
    window.addEventListener('mousedown', function create(event) {
  var nodes = document.querySelectorAll('.alliki'),
  selects = document.querySelectorAll('.select');
  var cls = event.target.classList;
  if(cls && cls.contains("select")){
  [].forEach.call( selects, function(select) {
  [].forEach.call( nodes, function(span) {
            var val = span.innerHTML;
            var option = new Option(val, val);
            select.appendChild(option)
     })
      })
     };
  window.removeEventListener('mousedown',create)
  });
    });
  </script>
</head>

<body>
<span class="alliki">1</span>
<span class="alliki">2</span>
<span class="alliki">3</span>
<span class="alliki">4</span>


<select class="select" >
</select>
<select class="select" >
</select>

</body>

</html>

djonA 09.11.2015 01:25

Отлично спасибо все работает.
Только хочу повесить на onclick, ане при загрузке страницы, так как в случае добавление на страницу элементов, они не активны.

пробую так но добавляется в двойном кол-ве option:
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script>
  function go123() {
  var nodes = document.querySelectorAll('.alliki'),
  selects = document.querySelectorAll('.select123');
  window.addEventListener('mousedown', function create(event) {
  var cls = event.target.classList;
  if(cls && cls.contains("select123")){
  [].forEach.call( selects, function(select123) {
  [].forEach.call( nodes, function(span) {
            var val = span.innerHTML;
            var option = new Option(val, val);
            select123.appendChild(option)
     })
      })
     };
  window.removeEventListener('mousedown',create)
  });
    };
  </script>
</head>

<body>
<span class="alliki">1</span>
<span class="alliki">2</span>
<span class="alliki">3</span>
<span class="alliki">4</span>


<select class="select123" onclick="go123();">
</select>
<select class="select123" onclick="go123();">
</select>

</body>

</html>

подскажите как при onclick проходится по span'ам и обновлять правильное кол-ве option в select'e, или просто удалить повторяющиеся значения option?

рони 09.11.2015 01:56

djonA,
пост 7 сейчас сработает когда бы вы недобавили без всяких onclick

djonA 09.11.2015 02:02

если я нажал на select а после этого добавились span, то новый span не добавляется в select.

т.е не отрабатывает если после загрузки страницы у меня добавляются или span или select.

А если на onclick вешаю, то отрабатывает но почему то дублирует значение, на каждый клик увеличивает кол-во выводимых в select option'ов


Часовой пояс GMT +3, время: 16:55.