Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript元素.classList.remove不工作_Javascript - Fatal编程技术网

JavaScript元素.classList.remove不工作

JavaScript元素.classList.remove不工作,javascript,Javascript,每当用户单击按钮时,我都试图从某个元素中删除一个类 在这个过程中,我先检查元素是否有类,然后再删除它 我使用的是React组件,我正在设置类变量this.images incomponentDidMount另外,这里的console.log确认我需要的图像数组 componentDidMount() { this.images = document.querySelectorAll(".project-image"); console.log(this.i

每当用户单击按钮时,我都试图从某个元素中删除一个类

在这个过程中,我先检查元素是否有类,然后再删除它

我使用的是React组件,我正在设置类变量this.images in
componentDidMount
另外,这里的console.log确认我需要的图像数组

    componentDidMount() {
        this.images = document.querySelectorAll(".project-image");
        console.log(this.images);
    }

    renderNextImage() {
        for (let i = 0, ilen = this.images.length; i < ilen; i++) {
            if (!this.images[i].classList.contains('d-none')) {
                this.images[i].classList.add('d-none');
                this.toggleNextImage(i);
            }
        }
    }
    toggleNextImage(count) {
        let max = this.images.length - 1;
        if (count < max) {
            count++;
            if (this.images[count].classList.contains('d-none')) {
                console.log("element contains class d-none");      // THIS WORKS
                this.images[count].classList.remove('d-none');
            }
        }
    }
componentDidMount(){
this.images=document.queryselectoral(“.project image”);
console.log(this.images);
}
RenderNext图像(){
for(设i=0,ilen=this.images.length;i
控制台日志显示在我的控制台中,但实际的classList.remove部分不起作用

我做错了什么


任何帮助都将不胜感激。

仅当您将其应用于元素时,此示例中就是这样。您需要确保此代码(this.images[count])是否表示元素

//JavaScript
var div=document.querySelector('div');

div.classList.remove('myClass')问题是您在循环中执行此操作。在
renderNextImage()
中调用
toggleNextImage()
,这将从列表中的下一个元素中删除该类。然后循环重复下一个值
i
,这会将类添加回来

当您找到要切换的图像时,需要打破循环

renderNextImage() {
    for (let i = 0, ilen = this.images.length; i < ilen; i++) {
        if (!this.images[i].classList.contains('d-none')) {
            this.images[i].classList.add('d-none');
            this.toggleNextImage(i);
            break;
        }
    }
}
renderNext图像(){
for(设i=0,ilen=this.images.length;i
你能发布一个,包括元素的标记、如何构造类以及如何调用方法吗?我不知道这是否有帮助,但我只是检查了一下,classList属性有一个toggle method。顺便说一句,如果(…..包含(…)),你不需要
检查,只要调用
remove
-当类不存在时不会出错。您使用的是哪个浏览器?@WolganEns他实际上没有切换。一个函数总是添加,另一个函数总是删除。这实际上是一个注释,而不是答案。再重复一点。请参阅以获取解释。我同意@Barmar在回答中不要提问如果它不代表元素,
contains()
测试如何工作?是的,我知道。但正如你所说。我还不能创建评论。因此,如果我试图帮助发表评论,我会像以前一样发布。我之所以添加contains()部分,是因为我想确保它确实代表了一个元素;修好了。评论中有人说这不是最好的方法。如何更有效地执行此操作?可以将当前图像的索引保存在一个全局变量中,只需将其递增即可。或者您可以使用
querySelector(“.d-none”)
并在其父元素中获取该元素的索引。