我有一个隐藏/显示超时时悬停时间的功能。 但现在我想让它显示一个用户徘徊的时间。 我知道必须用$(这个)来完成,但我无法让它工作。
JsFiddle http://jsfiddle.net/z332ozjs/
<p class="div">
<span class="time">[20:33:49]</span>
Time 1
</p>
<p class="div">
<span class="time">[21:35:49]</span>
Time 2
</p>
var msgTime = $('.div');
var time = $('span.time');
time.hide();
var x;
msgTime.hover(
function () {
x = setTimeout( function() {
$(this).find(time).show();
}, 100);
},
function () {
clearInterval(x);
$(this).find(time).hide();
}
);
答案 0 :(得分:4)
这是一个纯CSS解决方案:
.time {
display: none;
}
.div:hover .time {
display: inline;
}
<p class="div">
<span class="time">[20:33:49]</span>
Time 1
</p>
<p class="div">
<span class="time">[21:35:49]</span>
Time 2
</p>
答案 1 :(得分:1)
首先,纯CSS解决方案可能是最好的,as shown by Chris Pietschmann。
如果你想对你已经采取的方法进行微小的改动,可以采取一种方法(jsFiddle):
我们不会在hide()
上暂停span
,而是默认隐藏它,并根据悬停状态显示/隐藏它。
此外,使用课程.div
来保存div可能是一个坏主意,因为它会选择页面上的所有div。使用更具体的内容如div-time
会更好。
就不知道如何使用$(this)
而言,jquery事件选择器会自动在事件回调中传输上下文(即this
),以对应事件发生的元素。
另一件事是,您将jquery对象传递给find
jquery函数,但此函数作为参数使用的是一个选择器字符串,并使用它来查找调用find的jquery元素中的元素。所以,你需要改变:
$(this).find(time) // dont pass-in the jquery object "time"
要:
$(this).find('.time') // pass in the selector matching the class "time"
因此,当用户将鼠标悬停在元素上时,您可以做的是:
$(this) // select hovered element
.find('.time') // find the time span within it
.show(); // show the time
以下是代码的外观:
var msgTime = $('.div-time');
msgTime.hover(
function() {
$(this).find('.time').show();
},
function() {
$(this).find('.time').hide();
}
);
&#13;
.time {
display: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="div-time">
<span class="time">[20:33:49]</span>
Time 1
</p>
<p class="div-time">
<span class="time">[21:35:49]</span>
Time 2
</p>
&#13;
答案 2 :(得分:0)
几个问题。
首先,在setTimeout
内,由于关闭,您将失去this
的上下文。
要使用find()
搜索实例,请使用实际的选择器
var msgTime = $('.div');
var time = $('span.time');
time.hide();
var x;
msgTime.hover(
function () {
var $this = $(this); //store reference of element
x = setTimeout( function() {
$this.find('.time').show();// look for actual class
}, 100);
},
function () {
clearInterval(x);
$(this).find('.time').hide();
}
);
在div
标记上使用<p>
类似乎非常混乱。在大型应用程序上,这可能会导致很多混乱
的 DEMO 强>
答案 3 :(得分:0)
你的css:
.div:hover .time{
display:inline-block
}
.time{
display:none;
}
你的HTML:
<p class="div">
<span class="time" >[20:33:49]</span>
Time 1
</p>
<p class="div">
<span class="time" >[21:35:49]</span>
Time 2
</p>