如何将$(this)对象从一个函数传递给另一个函数?

问题描述:

我认为它非常基本的面向对象的javaScript相关问题。但我仍然很困惑。我想从1个函数传递$(this)对象到另一个函数。这样我可以获得点击链接的链接。

这里我的示例代码

HTML

<a href="#testblah" class="test" rel="image">TEST</a> 
<a href="#blahtest" class="test" rel="video">TEST</a> 

JS

$(document).on("click", ".test", function() { 

var $this = $(this); 
var rel = $this.attr("rel"); 

if (rel == "image") { 
    e.preventDefault(); 
    openImage($this); 
} else if (rel == "video") { 
    openVideo($this); 
} 
}); 

function openImage($this) { 

var href = $this.attr("href"); 
alert(href); 
} 
+5

如果您让您的事件处理程序接受'e'参数,那么您的代码工作正常:http://jsfiddle.net/6zAN7/19/ – 2013-03-25 17:00:28

+0

是的,您绝对正确@AndrewWhitaker! *无赖*我犯了一个愚蠢的错误! 只是要求意见是上述代码的最佳做法?我的意思是我定义了一个名为$ this的变量,然后使用相同的名称在其他函数中调用该对象?我应该使用不同的名字吗?或者根本不重要! 谢谢.. – 2013-03-25 17:10:14

+4

我会把这个变量命名为更有意义的东西,比如'link'或'anchor'。 '$ this'不是很具描述性。从技术上讲,这并不重要。 – 2013-03-25 17:11:14

我的问题有1个小的语法错误,请(检查的问题1评论)

是我最终的代码使用以下。

$(document).on("click", ".test", function (e) { 

    var anchor = $(this); 
    var rel = anchor.attr("rel"); 

    if (rel == "image") { 
     e.preventDefault(); 
     openImage(anchor); 
    } else if (rel == "video") { 
     openVideo(anchor); 
    } 
    }); 

    function openImage(anchor) { 
    var href = anchor.attr("href"); 
    alert(href); 
    } 

谢谢!

退房jQuery的文档page的例子。你会发现方法适用于选定的元素,在你的代码的情况下,它是文档对象。为了得到你想要的属性,jQuery没有必要包装元素。这是一个JSBin example。还有一件事,请用===尝试reemplace ==以获得类型检查。希望它可以帮助