我有一个列表,我试图在鼠标悬停时更改元素的文本。例如,如果我有这个清单
<ul>
<li id="first-li">Some text</li>
<li id="second-li">More text</li>
<li id="third-li">and more text</li>
</ul>
并且鼠标在第一个元素上方,我希望文本更改为,例如,“1st element”。
我正在尝试使用此代码实现上述目标:
$(document).ready(function(){
//when mouse is over, save initial value and replace with newText
function hover_in(newText){
console.log(newText);
var $this = $(this);
$this.data('initialText', $this.text());
$this.text(newText);
}
//when mouse is over, replace with initial value
function hover_out(){
var $this = $(this);
$this.text($this.data('initialText'));
}
$('#first-li').hover(function(){hover_in("NEW TEXT")}, hover_out);
});
我可以看到控制台中打印的hover_in
'“NEW TEXT”参数中的值插入但文本没有改变。
任何想法我做错了什么?
提前致谢!
答案 0 :(得分:5)
您的问题是,您正在尝试获取$(this)
变量的两个函数,仅在hover
函数中可用。
您必须将$(this)
作为此函数的变量传递。
$(document).ready(function(){
//when mouse is over, save initial value and replace with newText
function hover_in(newText, $this){
console.log(newText);
$this.data('initialText', $this.text());
$this.text(newText);
}
//when mouse is over, replace with initial value
function hover_out($this){
$this.text($this.data('initialText'));
}
$('li').hover(
function(){
hover_in("NEW TEXT", $(this));
},
function() {
hover_out($(this));
});
});
答案 1 :(得分:1)
因为你从一个函数调用hover_in,所以这不是指jQuery元素。您需要在函数中传递它才能引用它。
http://jsfiddle.net/whoacowboy/mguuknny/
<强>的JavaScript 强>
$(document).ready(function(){
//when mouse is over, save initial value and replace with newText
function hover_in(t,newText){
t.data('initialText', t.text());
t.html(newText);
}
//when mouse is over, replace with initial value
function hover_out(){
var $this = $(this);
$(this).html($(this).data('initialText'));
}
$('#list li').hover(function(){
hover_in($(this),"NEW TEXT");
}, hover_out);
});
<强> HTML 强>
<ul id="list">
<li> First element </li>
<li> Second element </li>
</ul>
答案 2 :(得分:1)
<!DOCTYPE htmL>
<html>
<head>
<title>Test</title>
<meta charset="utf-8" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/smoothness/jquery-ui.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js"></script>
</head>
<body>
<ul>
<li id="first">First element</li>
<li id="second">Second element</li>
</ul>
</body>
<script>
$(function() {
var first_maximized = "First element";
var first_minimized = "1st element";
var second_maximized = "2nd element";
var second_minimized = "Second element";
$("#first").hover(
function() {
$("#first").text(first_minimized);
},
function() {
$("#first").text(first_maximized);
}
);
$("#second").hover (
function() {
$("#second").text(second_maximized);
},
function() {
$("#second").text(second_minimized);
}
);
});
</script>
</html>
&#13;
尝试这种方法。
我使用了JQuery方法hover,在这种情况下需要两个参数: