[英]How to apply Hover-effects to other elements with the same css class?
I have this code snippet here我在这里有这个代码片段
<div class="container-01">container-01
<ul class="container-01-ul">
<li class="list-item-01">list-item-01</li>
<li class="list-item-02">list-item-02</li>
<li class="list-item-03">list-item-03</li>
<li class="list-item-04">list-item-04</li>
<li class="list-item-05">list-item-05</li>
</ul>
</div>
<div class="container-02">container-02
<ul class="container-02-ul">
<li class="list-item-01">list-item-01</li>
<li class="list-item-02">list-item-02</li>
<li class="list-item-03">list-item-03</li>
<li class="list-item-04">list-item-04</li>
<li class="list-item-05">list-item-05</li>
</ul>
</div>
For example if I hover on list-item-01
in container-01
the other list-item-01
in container-02
should also have the same effect?例如,如果我在container-01
中的 list-item list-item-01
上的 hover ,那么 container- container-02
中的另一个list-item-01
也应该具有相同的效果? Like I want to change the background-color when hovering on one of the list-item but it should also change the background-color of the other one.就像我想在将鼠标悬停在其中一个列表项上时更改背景颜色一样,但它也应该更改另一个列表项的背景颜色。
Is it possible with plain CSS?普通的 CSS 可以吗?
If not, how can I achieve this in JavaScript or jQuery?如果没有,我如何在 JavaScript 或 jQuery 中实现这一点?
I tried with this one which works but is there any better solutions??我试过这个可行,但有更好的解决方案吗?
<head>
<script>
function changeColor(x) {
document.querySelectorAll("." + x).forEach(el => el.style.backgroundColor = 'red');
}
function normal(x) {
document.querySelectorAll("." + x).forEach(el => el.style.backgroundColor = 'transparent');
}
</script>
</head>
<body>
<div class="container-01">container-01
<ul class="container-01-ul">
<li class="list-item-01" onmouseover="changeColor(this.className)" onmouseout="normal(this.className)">list-item-01</li>
<li class="list-item-02" onmouseover="changeColor(this.className)" onmouseout="normal(this.className)">list-item-02</li>
<li class="list-item-03" onmouseover="changeColor(this.className)" onmouseout="normal(this.className)">list-item-03</li>
<li class="list-item-04" onmouseover="changeColor(this.className)" onmouseout="normal(this.className)">list-item-04</li>
<li class="list-item-05" onmouseover="changeColor(this.className)" onmouseout="normal(this.className)">list-item-05</li>
</ul>
</div>
<div class="container-02">container-02
<ul class="container-02-ul">
<li class="list-item-01" onmouseover="changeColor(this.className)" onmouseout="normal(this.className)">list-item-01</li>
<li class="list-item-02" onmouseover="changeColor(this.className)" onmouseout="normal(this.className)">list-item-02</li>
<li class="list-item-03" onmouseover="changeColor(this.className)" onmouseout="normal(this.className)">list-item-03</li>
<li class="list-item-04" onmouseover="changeColor(this.className)" onmouseout="normal(this.className)" >list-item-04</li>
<li class="list-item-05" onmouseover="changeColor(this.className)" onmouseout="normal(this.className)">list-item-05</li>
</ul>
</div>
</body>
What you want is not possible with plain CSS, but below I give you an example of how you could achieve this using JavaScript:使用普通的 CSS 无法实现您想要的,但下面我将举例说明如何使用 JavaScript 实现这一目标:
// attach a global eventListener for illustrative purposes, // using a closer target would mean it's called less often document.addEventListener('mouseover', ({ target }) => { const className = target.className; // check if the target has the class fitting our pattern // NOTE: this might breaks when the element has more than one class. // using a data attribute would be more robust if (/list-item-\d{2}/.test(className)) { // get an array of all elements with that class const siblings = [...document.getElementsByClassName(className)]; // give each of those the hovered-class siblings.forEach(s => s.classList.add('hovered')); // attach an one-time eventListener to the target // to remove the hovered class on mouseleave target.addEventListener( 'mouseleave', () => siblings.forEach(s => s.classList.remove('hovered')), { once: true } ); } });
.hovered { background: blue; }
<div class="container-01">container-01 <ul class="container-01-ul"> <li class="list-item-01">list-item-01</li> <li class="list-item-02">list-item-02</li> <li class="list-item-03">list-item-03</li> <li class="list-item-04">list-item-04</li> <li class="list-item-05">list-item-05</li> </ul> </div> <div class="container-02">container-02 <ul class="container-02-ul"> <li class="list-item-01">list-item-01</li> <li class="list-item-02">list-item-02</li> <li class="list-item-03">list-item-03</li> <li class="list-item-04">list-item-04</li> <li class="list-item-05">list-item-05</li> </ul> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.