【问题标题】:How to create a link to invoke function of the jquery plugin itself如何创建链接以调用 jquery 插件本身的功能
【发布时间】:2013-01-20 04:48:29
【问题描述】:

我的插件创建链接,然后调用插件本身的功能。我可以直接操作 DOM 并使用 $link.click(function() {...}) 之类的东西,但我不想使用这种方法,因为 -

  1. 我的代码变得更加复杂和
  2. string manipulation is faster

如何通过字符串链接调用插件的功能?

问题在于找到创建插件的实际 DOM 元素。我不能只使用/设置 HTML id,因为它可能被页面用于其他目的,或者可能不是唯一的。我想出了添加一个独特的类以便稍后找到插件的想法:

 // init function of plugin
 init : function( options ) {
     return this.each(function () {
        var data = $this.data("myPlugin");
        if (!data) {
          data.uniqueClass = 'p' + new Date().getTime() + '_' + Math.random().toString().substring(2);
          $this.addClass(data.uniqueClass);  
          this.data('myPlugin', data);
          // generate link
          $this.html('<a onclick="jQuery(\'.' + data.uniqueClass + '\').myPlugin(\'func\');">Do func</a>');
        }   
     });
 }

 // function that i want to call of my plugin
 func : function() { 
    return this.each(function () {
       // do stuff
    });
 }

但是有没有更好的方法来做到这一点?

【问题讨论】:

  • 你为什么在 jQuery 插件中使用内联插入式脚本?没有意义
  • 可以使用parent()访问&lt;a&gt;的父元素,你要添加类的元素,不需要唯一的类来为点击处理程序创建一个目标
  • @charlietfl 我用 $this.html(...) 在那里编写的代码被简化了,实际上它是一个大表,我通过连接包含相当多行循环的字符串来创建它和细胞。单元格中的链接应调用具有不同参数的函数。因此,如果我向链接本身添加一个类,那么我将不得不将函数参数保存在 html 中的其他位置并使用例如解析它们。又是元数据插件,我也不认为它很漂亮。
  • 元数据插件现在已经过时了,因为 jQuery 读取 html5 data- 可以保存任何形式的数据的属性。你解析的html有多复杂并不重要,仍然很难说服我内联与不显眼更有意义。从长远来看,更容易保持内容和代码的分离
  • 很好,为 data- 属性的提示 +1,不知道。

标签: jquery jquery-plugins hyperlink


【解决方案1】:

不要这样做。您获得的额外性能可以忽略不计。

我不会将此作为评论发布,因为这应该是答案。 不要这样做!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多