Добавляю в массив элементы страницы (td), вывожу(console.log(arr);)(пример):
(2) [jQuery.fn.init(1), jQuery.fn.init(1)]
0: jQuery.fn.init [tr.1539953619.hovered.on.used]
1: jQuery.fn.init [tr.1539949435.hovered.on.used]
length: 2
__proto__: Array(0)
то есть, элементы добавляются правильно, дальше когда использую поиск элементов:
console.log(arr.indexOf($(this))); //$(this) потому что при клике если элемент не выбран (отсутствует класс used) добавляет элемент (arr[list.length] = $(this);) если нет - должно выводить его индекс
всегда выводит -1, хотя элементы там есть. Почему может не работать и как исправить?
$(this) - вызов функции $/jQuery, который возвращает новый/свежесозданный объект-обертку вокруг набора DOM-элементов, в данном случае - одного элемента this. Такого объекта-ссылки не может существовать в массиве.
Храните в массиве ссылки на DOM-элементы:
list.push(document.getElementById("test"));
...
console.log(list.indexOf(this));
Если вы пишете с помощью jQuery, то не нужно смешивать его с чистым js. Для сравление jQuery элементов можно использовать is:
element1.is(element2)
Тогда для проверки есть ли элемент в массиве можно использовать что-то типа
arrayItems.some((element) => { return element.is(element2); }
Где element - это массива, а element2 - то что вы пытаетесь найти в массиве
А для того, чтобы найти элемент в массиве
let founded = arrayItems.filter((element) {
return element.is(element2);
});
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости