何时在jQuery插件中使用'$(this)'和'this'? (关于net.tutsplus.com的文章)

时间:2009-07-24 00:06:17

标签: jquery plugins jquery-plugins coding-style

我现在正在学习jQuery,正在阅读Jeffrey Way的一篇文章,"You Still Can’t Create a jQuery Plugin?" 几乎一切都很清楚,但有一些我仍然无法理解。

问题从“第3步:构建插件”开始,标题标题为“For Each ...”,然后是“错误检查”。

   this.each(function() {  
     $this = $(this);
     var title = this.title; 
     if ($this.is('a') && $this.attr('title') != '') {  
       this.title = '';  
       $this.hover(function(e){  

问题

  1. this.title - 它的方法是什么?当我们使用jQuery时,我们键入$(this).attr('title') - 并创建jQuery以简化开发) this.title是指DOM规范还是Javascript内置方法?

  2. 我完全无法理解this关键字在这里发生了什么,我们何时必须使用this和何时$(this)?为什么我们使用this.each(func ...而不是$(this).each(func ...? (我已经测试了 - 它也有效,但有什么不同?)我知道工厂方法$()返回一组包装的DOM元素,但为什么我们在这里使用this.title(和再次$(this).attr('title')完成这项工作)? 我做了一些测试。我们可以在条件语句中键入this.titletitle而不是$this.attr('title'),但只要我们使用任何内容(title$(this).attr('title'))而不是{{1在this.title语句中 - 它不起作用。

  3. 好吧,我们指定了this.title = '';。但是当我们使用这个变量时,我们为什么要声明它呢?

  4. 我认为你们中的一些人比我更了解,理解我需要什么,所以我完成了我的解释) 非常非常感谢,如果你能说清楚的话)

3 个答案:

答案 0 :(得分:1)

  1. 使用jQuery的attr('title', newVal)方法,您可以将单个值应用于jQuery选择器中包含的所有元素,但是要更改单个元素,只需操作元素的{{1}即可。直接属性

  2. title函数中,each()参数是要迭代的项目。迭代DOM元素集合时,this将是一个DOM元素。如果你想在DOM元素上使用jQuery函数,你需要再次将它们包装在jQuery中,这意味着你需要使用this

  3. $(this).doAwesomeness()可能在嵌套在var title

  4. 内的函数中使用

答案 1 :(得分:0)

正如你自己所说,$()函数返回一组包装的DOM元素,它们为它添加了jquery功能。 $(this).attr('title')不会为this.title交换的原因是因为使用该函数的正确方法是这样的

$(this).attr( 'title', '' );

而不是

$(this).attr( 'title' ) = '';

你不能使用title =''因为title是一个局部变量而不是对属性本身的引用。

答案 2 :(得分:0)

  1. this.title是普通JS DOM中对象的title属性。 (http://w3schools.com/htmldom/prop_title.asp)。
  2. 以下等同于jQuery和普通的JS:

     var  blah = this.title;  // is the same as...
     var  blah = $(this).attr('title');
    
     this.title = 'blah';     // is the same as ...
     $(this).attr('title', 'blah');
    
    1. 这是指向触发事件或您正在运行的方法所属的对象的指针,JavaScript中的所有方法都属于某种父对象。

    2. $(object)将jQuery包装器附加到标准对象(允许您访问该对象的所有jQuery方法/ etc)