像这样的是我的HTML代码:
<div class="single-img"></div>
<h4>The title</h4>
<h4>The title 2</h4>
<div class="single-img"></div>
<div class="single-img"></div>
<h4>The title 3</h4>
<h4>The title 4</h4>
<div class="single-img"></div>
然后jquery代码是这样的:
$("h4").mouseenter(function() {
//Find the closest div.single-img and add class "hover";
}).mouseleave(function() {
//Find the closest div.single-img and remove class "hover";
});
我想要的是如果我将鼠标悬停在h4上它会找到更接近div.single-img并为其添加类,它可以是前一个div.single-img或下一个div.single-img。
例如,如果我将鼠标悬停在<h4>The title</h4>
上,如果将类添加到前一个div.single-img,那么如果我将鼠标悬停在<h4>The title 2</h4>
上,它会向下一个div.single-img添加一个类
我发现我不能使用.closest
,因为它在树中而不是兄弟姐妹。
答案 0 :(得分:0)
尝试$("h4").prev("div.single-img")
答案 1 :(得分:0)
这是一个示例,当您将鼠标悬停在关闭h4上时,该示例将突出显示带有蓝色的兄弟div中的文本。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<style>
.hover {
color: blue
}
</style>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
$(function() {
$("h4").mouseenter(function() {
//Find the closest div.single-img and add class "hover";
if ($(this).next().hasClass('single-img')) {
$(this).next().addClass('hover');
} else if ($(this).prev().hasClass('single-img')) {
$(this).prev().addClass('hover');
}
}).mouseleave(function() {
//Find the closest div.single-img and remove class "hover";
if ($(this).next().hasClass('single-img')) {
$(this).next().removeClass('hover');
} else if ($(this).prev().hasClass('single-img')) {
$(this).prev().removeClass('hover');
}
});
});
</script>
</head>
<body>
<div class="single-img">Test Area 1</div>
<h4>The title</h4>
<h4>The title 2</h4>
<div class="single-img">Test Area 2</div>
<div class="single-img">Test Area 3</div>
<h4>The title 3</h4>
<h4>The title 4</h4>
<div class="single-img">Test Area 4</div>
</body>
</html>
答案 2 :(得分:0)
你可以使用jQuery的.index()
找出父元素下面每个元素的位置,然后通过减去它们的索引来找到它们之间的距离。当你取绝对值Math.abs(...)
时,它会忽略负号(因此无论它是在目标元素之前还是之后都无关紧要。)
然后只需排序并返回最短距离的元素。请参阅以下示例:
var findNearestSib = function(element){
var t = $(element);
var ind = t.index();
var sibs = t.siblings('div.single-img'); // Filter out target siblings
var closest = sibs.map(function(i,e){
var cur = $(e).index(); // Index of current element
return {
dist: Math.abs(cur - ind), // Distance between sibling and h4
elem: e
};
}).toArray().sort(function(a,b){
return a.dist - b.dist; // Sort by shortest distance
});
if(closest.length){
return closest[0].elem; // Return nearest element
}
}
$("h4").mouseenter(function() {
$(findNearestSib(this)).addClass('hover');
}).mouseleave(function() {
$(findNearestSib(this)).removeClass('hover');
});
div.single-img {
background-color:blue;
height:12px;
border:2px solid white;
}
div.single-img.hover {
background-color:green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="parent-div">
<div class="single-img"></div>
<h4>The title</h4>
<h4>The title 2</h4>
<div class="single-img"></div>
<div class="single-img"></div>
<h4>The title 3</h4>
<h4>The title 4</h4>
<div class="single-img"></div>
</div>