如何通过单击和使用 vanilla js 来更改 div 的图标? [英] how to change the icon of a div by clicking and using vanilla js?
问题描述
我正在尝试单击标题以显示内容并更改标题旁边的图标.
主要思想是有一个加号,点击时内容可见,图标变成减号.
我正在使用 scss 和 vanilla js,到目前为止我有这个:
var jsaccordion = {初始化:函数(目标){var headers = document.querySelectorAll("#" + target + " .accordion-titulo");if (headers.length > 0) { for (var head of headers) {head.addEventListener("click", jsaccordion.select);}}},选择:函数(){var内容 = this.nextElementSibling;content.classList.toggle("打开");}};window.addEventListener('加载', function(){jsaccordion.init("手风琴定义");});
.accordion-titulo::before {内容: ".";显示:块;背景: url("./../Iconos/Icono\ some-icon");背景重复:不重复;背景位置:中心;光标:指针;宽度:35px;高度:35px;颜色:透明;浮动:对;}.accordion-texto {显示:无;颜色:#808080;填充:15px;}.accordion-texto.open {显示:块;}.accordion-titulo.open {背景: url("./../Iconos/Icono\ some-different-icon.svg");背景重复:不重复;背景位置:98% 居中;}
<div id="accordion-definiciones"><div class="my-3"><h3 class="accordion-titulo ">¿Lorem ipsum?</h3><div class="accordion-texto"><p>Lorem ipsum dolor sat amet consectetur adipisicing elit.Illo,animi perferendis necessitatibus sint molestiae eius magni!Libero voluptas mollitia laudantium,ad nihil cum quibusdam rerum labouriosam quia ea facere temporibus.</p>
我知道使用 Jquery 会更容易,但我想使用 vanilla js 来做到这一点
从你的代码看来,图标 some-different-icon
应该放在 :before 选择器中,作为图标some-icon
被添加到 :before 中.
此外,在 JavaScript 方面,您将 open
类设置为 .accordion-titulo
(即 .accordion-文本
).因此,您的 .accordion-titulo.open
样式将永远不会适用.
相反,我会在 .accordion-titulo
元素中设置 open
类,并使用 CSS 兄弟显示 .accordion-texto
选择器 +
.
包装所有这些,代码看起来像:
var jsaccordion = {初始化:函数(目标){var headers = document.querySelectorAll("#" + target + " .accordion-titulo");if (headers.length > 0) { for (var head of headers) {head.addEventListener("click", jsaccordion.select);}}},选择:函数(){this.classList.toggle("打开");}};window.addEventListener('加载', function(){jsaccordion.init("手风琴定义");});
.accordion-titulo::before {内容: " ";显示:块;背景: url("./../Iconos/Icono\ some-icon");背景重复:不重复;背景位置:中心;光标:指针;宽度:35px;高度:35px;颜色:透明;浮动:对;}.accordion-texto {显示:无;颜色:#808080;填充:15px;}.accordion-titulo.open + .accordion-texto{显示:块;}.accordion-titulo.open::before {背景: url("./../Iconos/Icono\ some-different-icon.svg");背景重复:不重复;背景位置:98% 居中;}
<div id="accordion-definiciones"><div class="my-3"><h3 class="accordion-titulo ">¿Lorem ipsum?</h3><div class="accordion-texto"><p>Lorem ipsum dolor sat amet consectetur adipisicing elit.Illo,animi perferendis necessitatibus sint molestiae eius magni!Libero voluptas mollitia laudantium,ad nihil cum quibusdam rerum labouriosam quia ea facere temporibus.</p>