如何使用Javascript查找所有匹配的类并允许它们都运行函数
下面将只找到第一个可用类并运行我的函数。我需要它来找到所有可用的类,这样所有的类都可以享受函数的乐趣 我该怎么做如何使用Javascript查找所有匹配的类并允许它们都运行函数,javascript,Javascript,下面将只找到第一个可用类并运行我的函数。我需要它来找到所有可用的类,这样所有的类都可以享受函数的乐趣 我该怎么做 this.DOM = {}; this.DOM.available = this.DOM.product.querySelector('.available'); this.DOM.available.addEventListener('click', () => this.open()); 完整代码 class Item { constructor(e
this.DOM = {};
this.DOM.available = this.DOM.product.querySelector('.available');
this.DOM.available.addEventListener('click', () => this.open());
完整代码
class Item {
constructor(el) {
this.DOM = {};
this.DOM.el = el;
this.DOM.product = this.DOM.el.querySelector('.product');
this.DOM.productBg = this.DOM.product.querySelector('.product__bg');
this.DOM.productImg = this.DOM.product.querySelector('.product__img');
this.DOM.available = this.DOM.product.querySelectorAll('.available');
this.info = {
img: this.DOM.productImg.src,
title: this.DOM.product.querySelector('.product__title').innerHTML,
subtitle: this.DOM.product.querySelector('.product__subtitle').innerHTML,
// description: this.DOM.product.querySelector('.product__description').innerHTML,
price: this.DOM.product.querySelector('.product__price').innerHTML
};
this.initEvents();
}
open() {
DOM.details.fill(this.info);
DOM.details.open({
productBg: this.DOM.productBg,
productImg: this.DOM.productImg
});
}
initEvents() {
this.DOM.available.addEventListener('click', () => this.open());
}
};
用于获取所有匹配元素的集合,然后用于循环该集合并分配事件处理程序:
this.DOM = {};
this.DOM.available = this.DOM.product.querySelectorAll('.available');
this.DOM.available.forEach(function(item){
item.addEventListener('click', () => item.open());
});
用于获取所有匹配元素的集合,然后用于循环该集合并分配事件处理程序:
this.DOM = {};
this.DOM.available = this.DOM.product.querySelectorAll('.available');
this.DOM.available.forEach(function(item){
item.addEventListener('click', () => item.open());
});
你考虑过使用和forEach吗?你考虑过使用和forEach吗?我试过了,但出现了一个错误。我已经添加了我的完整代码,也许你能注意到这个问题?“未捕获的TypeError:无法读取HtmlLevel上未定义的属性'open'。@Endothermic\u Dragon您不需要将从
.querySelectorAll()
返回的集合转换为数组,以便能够对其调用.forEach()
。DOM集合支持该接口。@这不是必需的。您可以直接从.queryselectoral()
调用返回的集合.forEach()
,如我在回答中所示。您提到的错误表明您正试图调用div
元素上的.open
方法,但是div
元素没有open
方法。这是由于在回调中使用了arrow函数造成的。在箭头函数中,此
保持不变,因此您应该使用对元素的引用。@monsaic123查看我更新的注释和答案。您在回调中使用这个
就是问题所在。@monsaic123我已经更新了答案来说明这一点。不要使用this
,而是使用.forEach()
循环变量--在我的示例中,这是项
。我尝试了这个方法,但出现了一个错误。我已经添加了我的完整代码,也许你能注意到这个问题?“未捕获的TypeError:无法读取HtmlLevel上未定义的属性'open'。@Endothermic\u Dragon您不需要将从.querySelectorAll()
返回的集合转换为数组,以便能够对其调用.forEach()
。DOM集合支持该接口。@这不是必需的。您可以直接从.queryselectoral()
调用返回的集合.forEach()
,如我在回答中所示。您提到的错误表明您正试图调用div
元素上的.open
方法,但是div
元素没有open
方法。这是由于在回调中使用了arrow函数造成的。在箭头函数中,此
保持不变,因此您应该使用对元素的引用。@monsaic123查看我更新的注释和答案。您在回调中使用这个
就是问题所在。@monsaic123我已经更新了答案来说明这一点。不要使用this
,而是使用.forEach()
循环变量——在我的示例中,这是项
。