2011-05-03 45 views
0

這可以作爲對象可能是一個小非標準.....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的(本)將不參考元件與.edit類,因爲它會調用editAsPage函數之前解釋它。

我想問題是,我可以傳遞一個字符串到editAsPage函數來解釋爲插件中的jQuery對象嗎?

這是一個非常簡單的例子。原因是,我不只是在插件中使用「this」,是因爲「source」可能會改變。它很可能是這樣的:

「源」:jQuery的(本)。家長(「選擇:一是」)

不知道這是否有意義就是我要問。在我看來,這是有道理的。 :)

謝謝。

回答

1

您需要爲此使用回調。第一步是通過回撥source來改變你的想法。接下來,您需要修改source以使用JS的call()方法(或適用時的apply())通過新的this定義。

(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

+0

當然。謝謝。 – 2011-05-03 06:48:04