javascript - jQuery - 通过`for`循环悬停时显示文本
问题描述
我正在制作网页并添加功能;当您将鼠标悬停在某个div
其他 div 上时,将显示某个文本。我希望有 5 个元素能够悬停并显示文本。
我添加了这个功能,但它不能正常工作 - 只有最后一个悬停div
显示文本。我隔离了使用的元素并将它们移动到沙箱中进行调整。无论我做什么(我通过使用一堆if
语句让它工作,但我试图删除它以便看起来更整洁),只有最后一个div
会显示文本。
这是带有许多if
语句的工作版本的小提琴:
https ://codepen.io/SynergyOfLife/pen/qBNJboR
setInterval(function(){
var dataArray = ["1","2","3","4","5"]
var isHovered1 = $(`.${dataArray[0]}`).is(":hover");
var isHovered2 = $(`.${dataArray[1]}`).is(":hover");
var isHovered3 = $(`.${dataArray[2]}`).is(":hover");
var isHovered4 = $(`.${dataArray[3]}`).is(":hover");
var isHovered5 = $(`.${dataArray[4]}`).is(":hover");
if (isHovered1) {
$('p').html("TEST")
} else if (isHovered2) {
$('p').html("TEST")
}else if (isHovered3) {
$('p').html("TEST")
} else if (isHovered4) {
$('p').html("TEST")
}else if (isHovered5) {
$('p').html("TEST")
} else {
$('p').html("")
}
}, 300);
div {
height:100px;
width: 100px;
background: blue;
float: left;
}
.viewer {
height: 500px;
width: 500px;
background: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="1">
<a>Test</a>
</div>
<div class="2">
<a>Test</a>
</div>
<div class="3">
<a>Test</a>
</div>
<div class="4">
<a>Test</a>
</div>
<div class="5">
<a>Test</a>
</div>
<div class="viewer">
<p></p>
</div>
这是我想要完善的版本: https ://codepen.io/SynergyOfLife/pen/VwjELME
setInterval(function(){
var dataArray = ["1","2","3","4","5"]
var i;
for (i = 0; i < dataArray.length; i++) {
var isHovered = $(`.${dataArray[i]}`).is(":hover");
if (isHovered) {
$('p').html("TEST")
} else {
$('p').html("")
}
}
}, 300);
div {
height:100px;
width: 100px;
background: blue;
float: left;
}
.viewer {
height: 500px;
width: 500px;
background: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="1">
<a>Test</a>
</div>
<div class="2">
<a>Test</a>
</div>
<div class="3">
<a>Test</a>
</div>
<div class="4">
<a>Test</a>
</div>
<div class="5">
<a>Only working div?</a>
</div>
<div class="viewer">
<p></p>
</div>
总之,我正在寻求有关如何缩短if
语句数量的帮助
解决方案
只需使用hover()方法,它接受两个函数,一个用于 mouseenter,一个用于 mouseleave。
var dataArray = ["1", "2", "3", "4", "5"]
var selectors = '.' + dataArray.join(',.');
$(selectors).hover(function() {
// `this` is the element the event occurred on
$('p').html('TEST ' + this.className)
}, function() {
$('p').empty()
})
div {
height: 100px;
width: 100px;
background: blue;
float: left;
}
.viewer {
height: 500px;
width: 500px;
background: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="1">
<a>Test</a>
</div>
<div class="2">
<a>Test</a>
</div>
<div class="3">
<a>Test</a>
</div>
<div class="4">
<a>Test</a>
</div>
<div class="5">
<a>Test</a>
</div>
<div class="viewer">
<p></p>
</div>
推荐阅读
- powershell - 为什么 Format-Table 省略属性
- java - 乐观锁定失败;嵌套异常是 org.hibernate.StaleObjectStateException
- c# - WPF HierarchicalDataTemplate 将 ItemSource 绑定到“嵌套”类属性
- html - 如何使用关键帧自动为我的 css 效果设置动画?
- cucumber - 如何在独立 jar 中定义或使用 karate-config.js?
- bash - 使用 xargs 限制作业提交
- firebase - Firebase 在动态链接部分显示不同的捆绑包 ID
- html - 如何使用 slideDown() Jquery 制作动画
- azure - 来自 REST API 调用的错误消息未显示在 B2C 自定义策略中
- linkedin - 使用 ugcPosts API 的linkedin 视频没有缩略图