【发布时间】:2013-01-20 04:48:29
【问题描述】:
我的插件创建链接,然后调用插件本身的功能。我可以直接操作 DOM 并使用 $link.click(function() {...}) 之类的东西,但我不想使用这种方法,因为 -
- 我的代码变得更加复杂和
- 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()访问<a>的父元素,你要添加类的元素,不需要唯一的类来为点击处理程序创建一个目标 -
@charlietfl 我用 $this.html(...) 在那里编写的代码被简化了,实际上它是一个大表,我通过连接包含相当多行循环的字符串来创建它和细胞。单元格中的链接应调用具有不同参数的函数。因此,如果我向链接本身添加一个类,那么我将不得不将函数参数保存在 html 中的其他位置并使用例如解析它们。又是元数据插件,我也不认为它很漂亮。
-
元数据插件现在已经过时了,因为 jQuery 读取 html5
data-可以保存任何形式的数据的属性。你解析的html有多复杂并不重要,仍然很难说服我内联与不显眼更有意义。从长远来看,更容易保持内容和代码的分离 -
很好,为
data-属性的提示 +1,不知道。
标签: jquery jquery-plugins hyperlink