如何在jquery中干掉需要$(this)的代码

时间:2014-08-13 18:24:11

标签: javascript jquery

我想干这个代码:

jQuery(function() {

  $(".new-link").hover(
    function(){
      var parent = $(this).parent();
      parent.css("background","#800080");
    },
    function(){
      var parent = $(this).parent();
      parent.css("background","transparent");
      }
    );
});

问题是......我无法在两个匿名函数之外定义parent变量,因为$(this)将不可用。

我没有提供很多细节。我认为那些是不重要的,因为这是一个理论问题。

简短回答:定义parent而不是var,因此它具有全局范围。

答案很长:以上解决方案可能安全,也可能不安全。使用下面建议的解决方案。

2 个答案:

答案 0 :(得分:4)

您可以在此处使用返回另一个函数的函数:

function hoverEvent(color) {
    return function(){
      var parent = $(this).parent();
      parent.css("background",color);
    };
}

jQuery(function() {

  $(".new-link").hover(
    hoverEvent("#800080"),
    hoverEvent("transparent")
    );
});

如果不需要parent,则可以$(this).parent().css("background",color)

在这里演示:http://jsfiddle.net/Ladkfnc8/1/

答案 1 :(得分:1)

修改,更新

尝试

V1

    (function(elem) {
      $(".new-link").hover(
        function(e){
          elem = $(e.target).parent();
          elem.css("background","#800080");
      }
      , function(e){
          elem.css("background","transparent");
      });
    }(undefined));

jsfiddle http://jsfiddle.net/guest271314/3p5vtdyb/3/

V2

    function evt(e) {
      return $(e.target).parent()
             .css("background" 
             , (e.type === "mouseenter" 
                ? "#800080" 
                : "transparent"));           
    };
    $(".new-link").hover(evt, evt);

jsfiddle http://jsfiddle.net/guest271314/3p5vtdyb/12/