我建议:
$('#pop li').hover(
function() {
$('div.info').eq($(this).index()).show();
}, function() {
$('div.info').eq($(this).index()).hide();
});
使用稍有改动的 HTML:
<div id="pop">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
<li>Item 7</li>
</ul>
</div>
<div class="info"></div>
<div class="info"></div>
<div class="info"></div>
<div class="info"></div>
<div class="info"></div>
<div class="info"></div>
<div class="info"></div>
JS 小提琴演示。
我忘了说的是,这将显示与当前悬停的.info
元素对应的元素,因此悬停第一个将显示第一个,依此类推。因此,它依赖于维护和元素之间的可预测关系。index
li
li
.info
li
.info
顺便说一句,可以仅使用 CSS 来复制此交互,尽管它需要单击而不是悬停事件,只要您修改li
HTML 以包含指向id
相关的链接div
:
<div id="pop">
<ul>
<li><a href="#info1">Item 1</a></li>
<li><a href="#info2">Item 2</a></li>
<li><a href="#info3">Item 3</a></li>
<li><a href="#info4">Item 4</a></li>
<li><a href="#info5">Item 5</a></li>
<li><a href="#info6">Item 6</a></li>
<li><a href="#info7">Item 7</a></li>
</ul>
</div>
<div class="info" id="info1"></div>
<div class="info" id="info2"></div>
<div class="info" id="info3"></div>
<div class="info" id="info4"></div>
<div class="info" id="info5"></div>
<div class="info" id="info6"></div>
<div class="info" id="info7"></div>
和CSS:
.info {
/* hides by default */
display: none;
}
.info:target {
/* shows when targeted */
display: block;
}
JS 小提琴演示。</p>
顺便说一句,引用属性是可选的(尽管如果它是包含空格的属性,则必须引用它),但是如果您引用,则必须在您引用的值的两端都有一个引号:不是<div id="info-1></div>
有效的HTML(因为string 直到下一个属性开头的下一行才关闭);使用:<div id="info-1"></div>
。
而且,进一步,您发布的 jQuery:
$(function(){
$('pop a').hover(function(){
$('#info-1').show();
},function(){
$('#info-1').hide();
});
});
这行不通,因为:
- 选择器不会匹配任何元素,您正在尝试定位
a
元素内部的pop
元素(显然,它不存在)。您需要做的是在前面id
加上 a #
(就像您在下一行中所做的那样,所以我假设那里有一个错字),给出:$('#pop a')
。但,
a
元素中没有#pop
元素,因此没有事件将被或可以被绑定。
但是,如果您需要使用该表单,则可以进行一些调整:
$(function(){
$('#pop li').hover(function(){
$('#info-' + $(this).text().match(/(\d+)/)).show();
},function(){
$('#info-' + $(this).text().match(/(\d+)/)).hide();
});
});
JS 小提琴演示。
参考: