Получение Id элемента
Добрый день!
Есть некий набор элементов. Каждый из них имеет уникальный Id вида id="el_34523". Элементы могут добавляться, могут удаляться... Как написать так, чтобы getElementById сам понимал эти элементы по клику на них? Т.е. нужно что-то типа: var item = document.getElementById('el_+номер'); |
Вешаешь обработчик событий на их родителя и в коллбэке проверяешь свойство target у первого аргумента.
parentEl.addEventListener('click', function(e) { console.log(e.target.id); //выведет id элемента, на который кликнули }, false); |
Если удаляться/добавляться, то делегировать обработку события ближайшему родителю коллекции этих элементов:
function getId(e) { if(e.tagName=="SPAN") alert(e.id) } <div id="as" onclick="getId(event.target || event.srcElement)"> <span id="as_1">AS1</span> <span id="as_2">AS2</span> <span id="as_3">AS3</span> </div> |
laimas,
добавил, как понял, но не работает... У меня надо брать className видимо? function getId(e) { if(e.className=="item") alert(e.id) } <div class="itemsList" id="el" onclick="getId(event.target || event.srcElement)"> <div class="header"> <div class="name"><p>Name<img src="media/main/arrowDownIco.png" alt=""></p></div> <div class="type"><p>Type</p></div> <div class="date"><p>Creation / Change Date</p></div> </div> <div class="item" id="el_01"> <div class="itemType" id="itemType"><img src="media/main/folderIco.png" alt=""></div> <div class="name"><a href="">Материалы для работы</a></div> <div class="type">Folder</div> <div class="date">Создано 10.12.2014</div> </div> <div class="item" id="el_02"> <div class="itemType" id="itemType"><img src="media/main/folderIco.png" alt=""></div> <div class="name"><a href="">Материалы для работы</a></div> <div class="type">Folder</div> <div class="date">Создано 10.12.2014</div> </div> <div class="item" id="el_03"> <div class="itemType" id="itemType"><img src="media/main/folderIco.png" alt=""></div> <div class="name"><a href="">Материалы для работы</a></div> <div class="type">Folder</div> <div class="date">Создано 10.12.2014</div> </div> <div class="item" id="el_04"> <div class="itemType" id="itemType"><img src="media/main/folderIco.png" alt=""></div> <div class="name"><a href="">Материалы для работы</a></div> <div class="type">Folder</div> <div class="date">Создано 10.12.2014</div> </div> </div> |
Пожалуйста, можете проверять и имя класса. Только у вас элементов полно, и не получится, нужно проверять по иерархии в таком случае, то есть перебирать все элементы "вверх" пока не достигнем искомого.
Вот так в вашем случае: function getId(e) { while(e.id != 'el') { if(e.className == 'item') { alert(e.id); break; } e = e.parentNode; } } |
laimas,
спасибо большое, но ощущение, что break где-то не там или что-то еще... После нажатия на элемент страница зависает... |
Все на месте - его задача после нахождения искомого элемента, id которого надо получить, закончить цикл.
|
Заработало) Спасибо огромное)
|
laimas,
еще один вопросик, если позволите. Задачка запихнуть по клику вышеозначенный объект в массив, либо убрать его оттуда, если он есть... Вроде, пишу логично, но не работает. Только добавляет в массив, но убирать не хочет. Более того - если нажать на уже добавленный объект, тот добавится еще раз...:/ var itemsList = []; function getId(e) { while(e.id != 'el') { if(e.className == 'item') { if(e in itemsList) { itemsList.splice(e); alert("убрали"); } else { itemsList.push(e); alert("добавили"); } break; } e = e.parentNode; } } |
Решил вопрос вот так (надеюсь, не криво :) ):
var itemsList = []; function arrayCheck(value, array) { for(var i = 0; i < array.length; i++) { if(array[i] == value) return true; } return false; } function getId(e) { while(e.id != 'el') { if(e.className == 'item') { if(arrayCheck(e, itemsList)) { itemsList.splice(e, 1); alert("убрали"); } else { itemsList.push(e); alert("добавили"); } break; } e = e.parentNode; } } |
Часовой пояс GMT +3, время: 10:18. |