gpt4 book ai didi

javascript - 使用javascript更改样式onclick时希望减少重复

转载 作者:行者123 更新时间:2023-11-28 19:24:28 25 4
gpt4 key购买 nike

此代码目前有效,当单击每个 div 时,背景颜色和字体大小将发生变化。此外,将删除已单击的其他两个 div 之一的格式。问题是这最终需要大量代码,我想象的远远超过需要。我想知道如何减少重复。在这个例子中这没什么大不了的,只有三个 div,但我的实际元素将需要更多。

我尝试包含多个 div,所以它看起来像这样;

document.querySelector(".div2, .div1").classList.remove("styles");

但这似乎没有用。

const div1 = document.querySelector(".div1");
const div2 = document.querySelector(".div2");
const div3 = document.querySelector(".div3");

function makeBigDiv1 () {
document.querySelector(".div1").classList.add("styles");
document.querySelector(".div2").classList.remove("styles");
document.querySelector(".div3").classList.remove("styles");
}

div1.addEventListener("click", makeBigDiv1);

function makeBigDiv2 () {
document.querySelector(".div2").classList.add("styles");
document.querySelector(".div1").classList.remove("styles");
document.querySelector(".div3").classList.remove("styles");
}

div2.addEventListener("click", makeBigDiv2);


function makeBigDiv3 () {
document.querySelector(".div3").classList.add("styles");
document.querySelector(".div1").classList.remove("styles");
document.querySelector(".div2").classList.remove("styles");
}

div3.addEventListener("click", makeBigDiv3);
.div1 {
width:500px;
height:100px;
border: 2px solid black;
}

.div2 {
width:500px;
height:100px;
border: 2px solid black;
}

.div3 {
width:500px;
height:100px;
border: 2px solid black;
}

.styles {
font-size: 50px;
background-color: grey;
}
<div class="div1">One</div>
<div class="div2">Two</div>
<div class="div3">Three</div>

好吧,正如我提到的那样,代码有效,但如果应用于大型元素,我觉得会变得过于冗长。我对此比较陌生,想编写 DRY - 不要重复自己 - 代码。谢谢!

最佳答案

如果你想让三个 div 有相同的样式,你可以一次给它们设置样式。您还可以使很多点击功能可重复使用。这就是我要做的:

const elements = document.querySelectorAll("div")

function attachClickHandler(className) {
return () => {
document.querySelector(`.${className}`).classList.add('styles');

document.querySelectorAll(`div:not(.${className})`).forEach(element => { element.classList.remove('styles') });
}
}

elements.forEach(element => {
element.addEventListener("click", attachClickHandler(element.className))
})
<html> 
<head>
<style>
.div1, .div2, .div3 {
width:500px;
height:100px;
border: 2px solid black;
}
.styles {
font-size: 50px;
background-color: grey;
}
</style>
</head>
<body>
<div class="div1">One</div>
<div class="div2">Two</div>
<div class="div3">Three</div>
<script>
</script>
</body>
</html>

在上下文中,您可能不想向每个 div 添加事件监听器,因此您可以只向所有要选择的 div 添加一个类,然后按类名查找所有内容,而不是查找所有类型的 div。这也将允许您为共享类添加基本样式,而不是添加到所有 3 个 div。

关于javascript - 使用javascript更改样式onclick时希望减少重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56587391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com