jQuery:传递插件一个字符串引用,用作插件中的对象

时间:2011-05-03 06:18:29

标签: jquery

这可能有点不合标准......

// 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的(本)。家长( “选择器:第一个”)

不确定这是否符合我的要求。这在我看来是有道理的。 :)

感谢。

1 个答案:

答案 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函数/回调。

来电信息并申请:http://www.pagecolumn.com/javascript/apply_call.htm