Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   узнать номер елемента в массиве при клике (https://javascript.ru/forum/misc/45445-uznat-nomer-elementa-v-massive-pri-klike.html)

Vlasenko Fedor 02.03.2014 04:19

Цитата:

Сообщение от Aetae (Сообщение 300255)
чувство прекрасного.)

не аргумент :)
другие аргументы будут

danik.js 02.03.2014 05:14

Цитата:

Сообщение от Poznakomlus
ты вешаешь на каждый элемент обработчик, а я к каждому элементу добавляю вызов функции приведи аргументы, что твой вариант лучше

У меня обработчик один. На все элементы навешиватеся всего лишь ссылка на него.

В твоем же случае создается по обработчику на элемент. Причем со всеми недостатками eval'а. А также неявно создается несколько with(){} блоков, что тоже не есть гуд.

Maxmaxmaxmaximus8 02.03.2014 13:02

Цитата:

Сообщение от danik.js
Почему никто не юзает

Потому что [].slice.apply(arguments, 2) ты можешь врым параметром передавать с какого места делать срез. Этот способ болеемощный. для arrayLike обьектов он не нужен, но все привыкли писать так и не хотят тратить время на определение где какой способ использовать. я думаю

ruslan_mart 02.03.2014 13:33

Maxmaxmaxmaximus8, с forEach гениальный вариант! :)

<!DOCTYPE HTML>
<html>
  <head></head>
  <body>
    <div class="a">Div 1</div>
    <div class="a">Div 2</div>
    <div class="a">Div 3</div>
    <div class="a">Div 4</div>
    <div class="a">Div 5</div>

    <script>
	var a = document.querySelectorAll('div.a');
    [].forEach.call(a, function(e, i) {
		e.onclick = function() {
			alert('Элемент ' + i + ': ' + e.textContent);
		}
	});
    </script>

  </body>
</html>

Maxmaxmaxmaximus8 02.03.2014 17:39

кококококомбо

<!DOCTYPE HTML>
<html>
  <head></head>
  <body>
    <div class="a">Div 1</div>
    <div class="a">Div 2</div>
    <div class="a">Div 3</div>
    <div class="a">Div 4</div>
    <div class="a">Div 5</div>

    <script>
    var elements = [].slice.call(document.querySelectorAll('div.a'));
    var listener = function () {
          alert(elements.indexOf(this))
    };

    elements.forEach(function (element) {
        element.addEventListener('click', listener)
    });
    </script>

  </body>
</html>

ruslan_mart 04.03.2014 09:34

Maxmaxmaxmaximus8, а почему сразу не [].forEach.call? Или есть подвох?

danik.js 04.03.2014 09:42

Цитата:

Сообщение от Ruslan_xDD
подвох?

[].indexOf.call?

ruslan_mart 04.03.2014 10:07

danik.js, ай всё, протупил. :)

danik.js 12.03.2014 08:46

Цитата:

Сообщение от danik.js
Почему никто не юзает Array.apply(null, arrayLike) ??

Цитата:

Сообщение от Maxmaxmaxmaximus8
Потому что [].slice.apply(arguments, 2)

Сегдня обнаружил, что это не работает с DOM в IE8.
Так что юзаем мой вариант Array.apply(null, nodeList) :)

Pechen 17.11.2014 20:10

я новичок в джаве --- подскажите чем плох мой код для такого случая?
<!DOCTYPE HTML>
<html>
  <head></head>
  <body>
    <div class="a">Div 1</div>
    <div class="a">Div 2</div>
    <div class="a">Div 3</div>
    <div class="a">Div 4</div>
    <div class="a">Div 5</div>

    <script>
	var elem = document.getElementsByTagName('div');
	var elements = [];
	for(var i=0; i<elem.length;i++){
		var option = elem[i].getAttribute('class');
		if(option=='a'){
			elements.push(elem[i]);
		}
	}
	for(var j=0;j<elements.length;j++){
		elements[j].onclick  = function () {
			alert(elements.indexOf(this));
			}
	}
    </script>
  </body>
</html>


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