javascript - jQuery 的 "standard"插件模式是否需要 $(this)

标签 javascript jquery jquery-plugins

我一直在关注 standard创建 jQuery 插件的方法。特别是关于不污染 fn 命名空间的一点。但是,我遇到了一些奇怪的事情,它违反了它自己的“永远不要使用 $(this) 规则。

var methods = {
 init : function( options ) {

   return this.each(function(){

     var $this = $(this), //HERE
         data = $this.data('tooltip'),
         tooltip = $('<div />', {
           text : $this.attr('title')
         });

     // If the plugin hasn't been initialized yet
     if ( ! data ) {

       /*
         Do more setup stuff here
       */

       $(this).data('tooltip', {
           target : $this,
           tooltip : tooltip
       });

     }
   });
 },

在这种特殊情况下,重新评估 this 是否必要?如果是,为什么?

最佳答案

是的,是的。

在方法内部,this 指的是用于调用插件的 jQuery 对象,但您使用 each 循环遍历这些元素。在 each 的回调中,this 引用 jQuery 对象中的 DOM 元素,因此您需要为每个元素创建一个新的 jQUery 对象,以便在其上使用 jQuery 方法。

关于javascript - jQuery 的 "standard"插件模式是否需要 $(this),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16411919/

相关文章:

javascript - 检查容器是否有Element

javascript - jQuery Accordion 不会删除单击上一个 Accordion 时的类

javascript - 当 CSS 属性溢出更改时,YouTube 视频在 firefox 上重新加载

javascript - .each() 不会推送重复的项目

jquery - 如何切换 div 的高度

javascript - 启动新的 React Native 项目时出错

jQuery 和 XPath XML 解析

select - jQuery 组合框/选择自动完成?

javascript - jquery at caret 插件在 IE 中不起作用

javascript - 有没有办法像 HTML5 <p> 标签一样将文本插入到 HTML5 SVG 中?