Jump to content
  • 0

Индекс элемента коллекции


likdike
 Share

Question

Доброй ночи, форумчане. Есть элемент div с id = "unique", в него вложено много элементов без id, но с class = "exemplar". Пользователь кликает по одному из этих элементов. Внимание вопрос: Как узнать по какому именно элементу кликнул пользователь? А лучше всего как узнать индекс этого элемента из коллекции элемента id = "unique".

Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0

Доброй ночи, форумчане. Есть элемент div с id = "unique", в него вложено много элементов без id, но с class = "exemplar". Пользователь кликает по одному из этих элементов. Внимание вопрос: Как узнать по какому именно элементу кликнул пользователь? А лучше всего как узнать индекс этого элемента из коллекции элемента id = "unique".

Вам матчасть или готовый код нужен?

Link to comment
Share on other sites

  • 0

Вам матчасть или готовый код нужен?

Это стеб?

var exs = document.getelementbyclass('exemplar'); // как я понимаю вернет массив объектов которые имеют класс exemplar.

exs ставим обработчик события onclick.

верно?

как сделать так чтобы функция которая вызывается при наступлении события выводила индекс элемента в коллекции?

Link to comment
Share on other sites

  • 0

Это стеб?

Нет, это нормальный вопрос, потому что зачастую требуют от нас именно готового решения.

var exs = document.getelementbyclass('exemplar'); // как я понимаю вернет массив объектов которые имеют класс exemplar.

exs ставим обработчик события onclick.

верно?

как сделать так чтобы функция которая вызывается при наступлении события выводила индекс элемента в коллекции?

В направлении вы верны, не верны в реализации. getElementsByClass - правильная запись. Вернет она действительно коллекцию.

Далее, путем перебора каждого элемента коллекции (помогут for, while, do while), присваиваете каждому элементу обработчик для события "click". Тут поможет addEventListener. А вот дальше будет сложнее.

Сложность определения индекса в том, что getElementsByClass, вызванный у документа, вернет все элементы с указанным классом, вне зависимости от того, где они расположены. И если у вас вдруг, чисто случайно, появится div с id="unique2", то в коллекцию попадут и эти элементы тоже. И, тогда, чтобы определить позицию относительно #unique2, придется перебирать элементы именно этого контейнера.

Link to comment
Share on other sites

  • 0
Сложность определения индекса в том, что getElementsByClass, вызванный у документа, вернет все элементы с указанным классом, вне зависимости от того, где они расположены

Так на обработчике ему и выдаст элемент, который нужен со своим индексом.

getElementsByClass - правильная запись

Кстати, если не ошибаюсь, так - getElementsByClassName

Edited by alexandr_v-vich
Link to comment
Share on other sites

  • 0
Пользователь кликает по одному из

event.target (ну и window.event.srcElement в старых IE, "для баланса") не помогут?

как вариант. но хотелось бы индекс элемента коллекции.

Это стеб?

Нет, это нормальный вопрос, потому что зачастую требуют от нас именно готового решения.

var exs = document.getelementbyclass('exemplar'); // как я понимаю вернет массив объектов которые имеют класс exemplar.

exs ставим обработчик события onclick.

верно?

как сделать так чтобы функция которая вызывается при наступлении события выводила индекс элемента в коллекции?

В направлении вы верны, не верны в реализации. getElementsByClass - правильная запись. Вернет она действительно коллекцию.

Далее, путем перебора каждого элемента коллекции (помогут for, while, do while), присваиваете каждому элементу обработчик для события "click". Тут поможет addEventListener. А вот дальше будет сложнее.

Сложность определения индекса в том, что getElementsByClass, вызванный у документа, вернет все элементы с указанным классом, вне зависимости от того, где они расположены. И если у вас вдруг, чисто случайно, появится div с id="unique2", то в коллекцию попадут и эти элементы тоже. И, тогда, чтобы определить позицию относительно #unique2, придется перебирать элементы именно этого контейнера.

что как правильно пишется не столь важно. синтаксис я могу посмотреть в справочнике. Проблему с id = "unique2" я прекрасно понимаю. Но всё таки скажите возможно ли узнать индекс элемента коллекции по которому кликнул пользователь исходя из родных свойств и методов javascript и DOM?

Link to comment
Share on other sites

  • 0
Но всё таки скажите возможно ли узнать индекс элемента коллекции по которому кликнул пользователь исходя из родных свойств и методов javascript и DOM?

Так так и написали. Цикл + обработчик = элемент, по которому кликнул. Куда же роднее? :)

Как пример:


var arr = document.getElementsByClassName("ClassName");
for(var i=0; i<arr.length; i++) {
arr[i].addEventListener("click", function() {
alert(i);
});
}

Дальше уж разберёте, думаю.

Edited by alexandr_v-vich
Link to comment
Share on other sites

  • 0

var arr = document.getElementsByClassName("ClassName"),
i;
for (i = 0; i < arr.length; i++) {
arr[i].num = i;
arr[i].addEventListener("click", function () {
alert(this.num);
}, false);
}

верно? если добавить к каждому элементу коллекции свойство num?

Edited by likdike
Link to comment
Share on other sites

  • 0


var arr = document.getElementsByClassName("ClassName");
for(var i=0; i<arr.length; i++) {
arr[i].addEventListener("click", function() {
alert(i);
});
}

Дальше уж разберёте, думаю.

Думаю, что все элементы будут выводить одно и то же. :)

верно? если добавить к каждому элементу коллекции свойство num?

Это лучше всего. Но если вы переставите местами элементы в дереве или же удалите какой-то элемент, то может так оказаться, что нумерация будет идти не по порядку.

Нужно более точно знать, для чего будет эта нумерация использоваться

Link to comment
Share on other sites

  • 0
Как узнать по какому именно элементу кликнул пользователь? А лучше всего как узнать индекс этого элемента из коллекции элемента id = "unique".

Данная информация содержится в объекте события.

Получение объекта события

Делегирование событий

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy