Добавить прослушиватель событий для всех изображений, которые не находятся внутри привязки

#javascript #html #dom

#javascript #HTML #dom

Вопрос:

Как я могу выбрать все <img> элементы, которые не находятся внутри <a> привязки, без каких-либо библиотек в ванильном JavaScript (без каких-либо библиотек)? Каков наиболее эффективный способ сделать это?

Комментарии:

1. Прямого нативного способа нет, так как нет родительских селекторов, и :not() он реализован не полностью. Один из способов — создать массив всех изображений, а затем отфильтровать его, например, так: offLinkImgs = imgs.filter(img => !img.closest('a')) .

2. @Teemu Я подумал: в настоящее время not поддерживается довольно широко. Разве это не так? Это не родительский селектор, OP не хочет что-то делать с привязкой, содержащей изображение, но с изображениями, содержащимися в привязке

3. Поддерживается большинством популярных браузеров. Но да, это еще не полностью поддерживается менее популярными браузерами. Проверьте это на caniuse.

4. @LaurentS. Да, это так. Базовый :not , вероятно, поддерживается довольно широко, но все свойства, которые он может содержать, еще не реализованы в браузерах. MDN говорит: » Возможность перечислять более одного селектора является экспериментальной и пока широко не поддерживается». И для этой задачи нам понадобится несколько селекторов :not , чтобы решить эту задачу.

Ответ №1:

Это оказалось действительно просто:

 // Use CSS-like selector
const images = document.querySelectorAll(":not(a) > img");

// Foreach it

images.forEach((img) => {
// Use the img variable
}