我有一个div元素列表,每个元素都包含一个标题和一个正文部分。最初仅显示每个项目的标题,单击时,相应的正文应显示在标题下方。再次单击标题时,主体应消失。我使用的逻辑是在每个列表项上附加/删除类名“extended”,以便通过CSS显示和隐藏正文部分。
现在,我正在尝试创建一个动态脚本,以允许几乎无限的列表条目,而不必专门针对每个条目,但我无法使它适用于所有条目。
HTML
<div class="list-wrapper">
<div class="chapter chapter-1">
<div class="chapter-header"></div>
<div class="chapter-body"></div>
</div>
<div class="chapter chapter-2">
<div class="chapter-header"></div>
<div class="chapter-body"></div>
</div>
<div class="chapter chapter-3">
<div class="chapter-header"></div>
<div class="chapter-body"></div>
</div>
</div>
JavaScript
var chapter = document.getElementsByClassName('chapter')[0];
var chapterHeader = document.getElementsByClassName('chapter-header')[0];
chapterHeader.addEventListener("click", function(){
chapter.classList.toggle("extended");
});
上面的代码适用于第一项,但显然不适用于其余项。有什么想法吗?我对香草JavaScript代码感兴趣。提前谢谢。
我相信是这样的
chapterHeader.addEventListener("click", function(this){
this.nextSibling.classList.toggle("extended");
});
事件冒泡是关键词。
只向容器添加一个事件。单击容器时,它首先处理内部元素,然后处理外部元素。
let list = document.getElementById("myList");
list.addEventListener("click", function(event) {
// Do stuff with target
console.log(event.target.className);
})
<div id="myList" class="list-wrapper">
<div class="chapter chapter-1">
<div class="chapter-header">Chapter header 1</div>
<div class="chapter-body">Chapter body 1</div>
</div>
<div class="chapter chapter-2">
<div class="chapter-header">Chapter header 2</div>
<div class="chapter-body">Chapter body 2</div>
</div>
<div class="chapter chapter-3">
<div class="chapter-header">Chapter header 3</div>
<div class="chapter-body">Chapter body 2</div>
</div>
</div>
您需要使用方法foreach()
来处理类的集合。还有方法最接近()
,它允许您引用当前元素的指定父级。
尝试以下it代码:
let chapterHeader = document.querySelectorAll('.chapter-header');
chapterHeader.forEach(function(chapterHeader_current, index) {
chapterHeader_current.addEventListener('click', function() {
let current_chapter = this.closest('.chapter');
current_chapter.classList.toggle("extended");
});
});
问题内容: 假设我有一个数组/要比较的事物列表。在我更熟悉的语言中,我会做类似的事情 这样可以确保我们只比较每对一次。在某些情况下,我正在对列表中包含的一堆对象进行碰撞检测。对于检测到的每个碰撞,将一个描述碰撞的小的“碰撞”对象添加到列表中,然后另一个例程循环循环以解决每个碰撞(取决于两个碰撞对象的性质)。显然,我只想报告每个碰撞一次。 现在,这样做的pythonic方式是什么,因为Python倾
我有一个方法返回一个
问题内容: 是否可以为列表理解中的每个项目返回2个(或更多)项目? 我想要的(示例): 应该回来 因此,可以替换以下代码块: 问题答案: 时间: 2.69210777094 3.13900787874 1.62461071932 25.5944058287 29.2623711793 25.7211849286
问题内容: 我遇到了我认为应该是一个非常简单的问题。 我需要将arrayList中的每个项目与列表中的其他所有项目进行比较,而无需将项目与其自身进行比较。它不像调用equals()比较那样简单,它涉及一些自定义逻辑,我在下面的代码中省略了这些自定义逻辑。而且,ArrayList不应以任何方式更改。 我似乎遇到的问题是,一旦进入第二个循环,我就不知道是否有另一个对象要与之比较(因为它是一个可变大小的
问题内容: 我刚刚开始使用Java中的列表。我想知道推荐的修改列表中每个元素的方法是什么? 我已经可以通过以下两种方法来完成此任务,但是它们看起来都相当简单。有没有更好的方法可以在Java中完成此操作?是否推荐以下任何一种方法,或者两者都处于同一水平? 问题答案: 第二个版本会更好。在内部,它们最后是相同的,但是第二个实际上允许您修改列表,而第一个将引发ConcurrentModification
问题内容: 我试图使用Eclipse从SVN中签出一个项目。我尝试使用“签出为”将其放入“来自现有Ant脚本的Java项目”中,但是项目向导要求文件已下载。有没有一种方法可以将项目作为Java项目检入Eclipse,而不必先将其下载到其他地方? (我在Subversive中使用Eclipse Ganymade 3.4.1。) 问题答案: 如果未选中作为一个Java项目,您可以添加Java性质如图所