Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.02.2015, 18:00
Интересующийся
Отправить личное сообщение для slavaspirit Посмотреть профиль Найти все сообщения от slavaspirit
 
Регистрация: 22.06.2013
Сообщений: 14

Получение Id элемента
Добрый день!

Есть некий набор элементов. Каждый из них имеет уникальный Id вида id="el_34523". Элементы могут добавляться, могут удаляться...

Как написать так, чтобы getElementById сам понимал эти элементы по клику на них?

Т.е. нужно что-то типа:
var item = document.getElementById('el_+номер');
Ответить с цитированием
  #2 (permalink)  
Старый 27.02.2015, 18:12
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

Вешаешь обработчик событий на их родителя и в коллбэке проверяешь свойство target у первого аргумента.

parentEl.addEventListener('click', function(e) {
  console.log(e.target.id); //выведет id элемента, на который кликнули
}, false);
Ответить с цитированием
  #3 (permalink)  
Старый 27.02.2015, 18:13
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Если удаляться/добавляться, то делегировать обработку события ближайшему родителю коллекции этих элементов:
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>
Ответить с цитированием
  #4 (permalink)  
Старый 27.02.2015, 18:28
Интересующийся
Отправить личное сообщение для slavaspirit Посмотреть профиль Найти все сообщения от slavaspirit
 
Регистрация: 22.06.2013
Сообщений: 14

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>
Ответить с цитированием
  #5 (permalink)  
Старый 27.02.2015, 18:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Пожалуйста, можете проверять и имя класса. Только у вас элементов полно, и не получится, нужно проверять по иерархии в таком случае, то есть перебирать все элементы "вверх" пока не достигнем искомого.

Вот так в вашем случае:
function getId(e) {
    while(e.id != 'el') {
        if(e.className == 'item') {
           alert(e.id);
           break;
        }
        e = e.parentNode;
    }
}

Последний раз редактировалось laimas, 27.02.2015 в 18:52.
Ответить с цитированием
  #6 (permalink)  
Старый 27.02.2015, 19:17
Интересующийся
Отправить личное сообщение для slavaspirit Посмотреть профиль Найти все сообщения от slavaspirit
 
Регистрация: 22.06.2013
Сообщений: 14

laimas,
спасибо большое, но ощущение, что break где-то не там или что-то еще... После нажатия на элемент страница зависает...
Ответить с цитированием
  #7 (permalink)  
Старый 27.02.2015, 19:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Все на месте - его задача после нахождения искомого элемента, id которого надо получить, закончить цикл.
Ответить с цитированием
  #8 (permalink)  
Старый 27.02.2015, 21:02
Интересующийся
Отправить личное сообщение для slavaspirit Посмотреть профиль Найти все сообщения от slavaspirit
 
Регистрация: 22.06.2013
Сообщений: 14

Заработало) Спасибо огромное)
Ответить с цитированием
  #9 (permalink)  
Старый 27.02.2015, 22:28
Интересующийся
Отправить личное сообщение для slavaspirit Посмотреть профиль Найти все сообщения от slavaspirit
 
Регистрация: 22.06.2013
Сообщений: 14

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;
          }
        }

Последний раз редактировалось slavaspirit, 27.02.2015 в 22:50.
Ответить с цитированием
  #10 (permalink)  
Старый 27.02.2015, 22:54
Интересующийся
Отправить личное сообщение для slavaspirit Посмотреть профиль Найти все сообщения от slavaspirit
 
Регистрация: 22.06.2013
Сообщений: 14

Решил вопрос вот так (надеюсь, не криво ):

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;
          }
        }

Последний раз редактировалось slavaspirit, 27.02.2015 в 23:04.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение элемента в функции, используя each() ansi_str jQuery 0 30.11.2012 09:48
Получение элемента в модальном окне any.zicky Библиотеки/Тулкиты/Фреймворки 1 31.08.2012 16:36
Получение ссылки вызвавшего элемента belkir Events/DOM/Window 8 02.08.2011 12:32
Получение значения соседнего элемента Max Tretyakov Events/DOM/Window 2 27.06.2011 22:01
Получение стиля элемента. BreatheInTheVoid Элементы интерфейса 4 01.05.2010 17:25