javascript - 如何应用影响具有特定类名的每个元素的父级的函数?
问题描述
我有一系列div
带有类名的 sx
在其他div
带有类名的 s 中item
。s 在 main的item
div
一个部分内。
我想要做的是创建一个函数,通过影响它们各自的父类(在这种情况下更改它们的 CSS)来平等地应用于每个x
类。div
我编码了这个:
var openbtn = document.getElementsByClassName("x")[0];
openbtn.onclick = function() {
document.body.parentElement.style.backgroundColor = "red";
}
但是,这只适用于x
头等舱<div>
。当它工作时,它会改变部分的背景颜色,或者主要或主体元素,而不是x
类div
父类(item
类 div)。
解决方案
如果要在每个.x
元素上使用处理程序来处理此问题,则必须为每个元素添加处理程序.x
。(但您可能不想这样做,请继续阅读。)看起来像这样:
var openbtns = document.getElementsByClassName("x");
for (var n = 0; n < openbtns.length; ++n) {
openbtns[n].addEventListener("click", xClickHandler);
}
... wherexClickHandler
使用this
(or event.currentTarget
) 知道.x
点击了哪个元素:
function xClickHandler() {
this.parentElement.style.backgroundColor = "red"; // I suggest using a class instead of doing this, btw
}
但是,如果所有这些.x
元素都在同一个整体容器中,您可以使用事件委托来做到这一点,如下所示:
document.querySelector("selector-for-the-overall-container").addEventListener("click", function(event) {
// Find the `.x` that was clicked (which may be `event.target` or may be
// an ancestor node of it
var x = event.target.closest(".x");
if (x && this.contains(x)) {
x.parentElement.style.backgroundColor = "red"; // Again, suggest using a class
}
});
更多的:
使用您评论中的 HTML 的实时示例:
document.getElementById("items").addEventListener("click", function(event) {
// Find the `.x` that was clicked (which may be `event.target` or may be
// an ancestor node of it
var x = event.target.closest(".x");
if (x && this.contains(x)) {
x.parentElement.style.backgroundColor = "red"; // Again, suggest using a class
}
});
.x {
display: inline-block;
width: 10px;
height: 10px;
background-color: blue;
}
section {
background-color: yellow;
padding: 8px;
}
<main id="items">
<section id="design">
<div class="item">
<div class="x"></div>
<h1>Design stuff</h1>
</div>
</section>
<section id="art">
<div class="item">
<h1>Art stuff</h1>
<div class="x"></div>
</div>
</section>
</main>
推荐阅读
- r - 如何在表格中添加通用序列号和标题
- data-structures - 对加权无向图使用基于 BFS 的单源最短路径
- android - 如何通过蓝牙控制快门开关
- laravel - GraphQl LightHouse Where Condition 不工作
- electron - Electron 应用程序导出为 Snap 时无法获取 ipaddress
- android-studio - 如何在每个项目recyclerview中获取单选按钮
- debugging - 当 vscode 远程调试机器学习代码时,这意味着什么?卡住了吗?除了退出如何解决问题?
- console - VS 2017 控制台窗口正在运行但未显示
- django - 我不知道我是否应该使用 models.Foreignkey 或只是 Charfield 来存储 oauth 令牌
- asp.net-mvc - ASP.NET MVC 5 中的动态列