jQuery - li元素上的悬停函数

时间:2015-03-11 16:17:29

标签: javascript jquery text

我有一个列表,我试图在鼠标悬停时更改元素的文本。例如,如果我有这个清单

<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”参数中的值插入但文本没有改变。

任何想法我做错了什么?

提前致谢!

3 个答案:

答案 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)

&#13;
&#13;
<!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;
&#13;
&#13;

尝试这种方法。

我使用了JQuery方法hover,在这种情况下需要两个参数:

  • 首先是鼠标在元素内的功能
  • 其次是whien鼠标不在元素中的功能