|
|

02.03.2014, 04:19
|
 |
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Сообщение от Aetae
|
|
чувство прекрасного.)
|
не аргумент
другие аргументы будут
|
|

02.03.2014, 05:14
|
 |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
|
Сообщение от Poznakomlus
|
|
ты вешаешь на каждый элемент обработчик, а я к каждому элементу добавляю вызов функции приведи аргументы, что твой вариант лучше
|
У меня обработчик один. На все элементы навешиватеся всего лишь ссылка на него.
В твоем же случае создается по обработчику на элемент. Причем со всеми недостатками eval'а. А также неявно создается несколько with(){} блоков, что тоже не есть гуд.
__________________
В личку только с интересными предложениями
|
|

02.03.2014, 13:02
|
|
Аспирант
|
|
Регистрация: 22.02.2014
Сообщений: 96
|
|
|
Сообщение от danik.js
|
|
Почему никто не юзает
|
Потому что [].slice.apply(arguments, 2) ты можешь врым параметром передавать с какого места делать срез. Этот способ болеемощный. для arrayLike обьектов он не нужен, но все привыкли писать так и не хотят тратить время на определение где какой способ использовать. я думаю
|
|

02.03.2014, 13:33
|
 |
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
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>
Последний раз редактировалось ruslan_mart, 02.03.2014 в 13:38.
|
|

02.03.2014, 17:39
|
|
Аспирант
|
|
Регистрация: 22.02.2014
Сообщений: 96
|
|
кококококомбо
<!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>
|
|

04.03.2014, 09:34
|
 |
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
|
Maxmaxmaxmaximus8, а почему сразу не [].forEach.call? Или есть подвох?
|
|

04.03.2014, 09:42
|
 |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
|
Сообщение от Ruslan_xDD
|
|
подвох?
|
[].indexOf.call?
__________________
В личку только с интересными предложениями
|
|

04.03.2014, 10:07
|
 |
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
danik.js, ай всё, протупил. 
|
|

12.03.2014, 08:46
|
 |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
|
Сообщение от danik.js
|
|
Почему никто не юзает Array.apply(null, arrayLike) ??
|
|
Сообщение от Maxmaxmaxmaximus8
|
|
Потому что [].slice.apply(arguments, 2)
|
Сегдня обнаружил, что это не работает с DOM в IE8.
Так что юзаем мой вариант Array.apply(null, nodeList) 
__________________
В личку только с интересными предложениями
|
|

17.11.2014, 20:10
|
|
Новичок на форуме
|
|
Регистрация: 16.11.2014
Сообщений: 5
|
|
я новичок в джаве --- подскажите чем плох мой код для такого случая?
<!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>
|
|
|
|