这可能有点不合标准......
// JavaScript Document
(function( $ ){
$.fn.editAsPage = function(options) {
var settings = {};
if(options){ jQuery.extend(settings, options); }
return this.each( function(){
var el = jQuery(this);
alert(settings.source.attr("class"));
});
};
})(jQuery);
我的问题在于settings.source参数。 attr(“class”)只是一个例子,我需要从特定的DOM元素中获取几个属性,但插件的用户可能需要定义哪些DOM元素settings.source。
所以你说,只需传入一个jQuery对象。我遇到问题的地方是,我想在插件中引用“this”的父级。
例如:
jQuery(".edit").editAsPage({
'source':jQuery(this)
});
这里,jQuery(this)不会引用带有.edit类的元素,因为它会在调用editAsPage函数之前解释它。
我想问题是,我可以将一个字符串传递给editAsPage函数,以便在插件中解释为jQuery对象吗?
这是一个非常简单的例子。原因,我不只是在插件中使用“this”,因为“源”可能会改变。它很可能是这样的:
'源':jQuery的(本)。家长( “选择器:第一个”)
不确定这是否符合我的要求。这在我看来是有道理的。 :)
感谢。
答案 0 :(得分:1)
您需要为此使用回调。第一步是通过使source
成为回调来改变您应该如何工作的思路。接下来,您需要修改source
以使用JS this
mtheod(或适用时为call()
)传递新的apply()
定义。
您修改的插件代码如下所示:
(function( $ ){
$.fn.editAsPage = function(options) {
var settings = {};
if(options){ jQuery.extend(settings, options); }
return this.each( function(){
var el = jQuery(this);
settings.source.call(this, el);
});
};
})(jQuery);
您的用户会像这样使用它:
$('.edit').editAsPage({
source:function(){
$('.parent').append('<strong>#'+$(this).parent().attr('id')+'</strong>');
$('.id').append('<strong>#'+$(this).attr('id')+'</strong>');
}
});
在此处查看实时示例:http://jsbin.com/ipafe4
在此处播放实时示例:http://jsbin.com/ipafe4/edit
我们所做的是更改“this
”的意思,然后将其返回给用户定义的source
函数/回调。