2012-04-20 56 views
0

我的問題是下面的代碼! 我想擴展一個jQuery對象到我的XjQuery對象,我似乎是工作。 但在每個函數中,我會發現函數myfunc沒有聲明 這裏有什麼錯?將jQuery對象擴展到我自己的對象

歡呼和

對不起我的英文不好

XjQuery = function() 
    {   
     var jq = $("<div id=xjq>hallo</div>"); 
     $.extend(this, jq); 
    } 
    XjQuery.prototype.myfunc = function() { 
     this.append("<p>myfunc called</p>"); 
    } 
    xjq = new XjQuery(); 

    xjq.myfunc(); // this works 
    $("#maindiv").append(xjq); // works also 
    $("#maindiv").find("#xjq").each(function() { 
     $(this).myfunc(); // doesn't work 
    }); 

回答

2

each裏面,this是土生土長的DOM元素,$(this)是一個jQuery對象。你需要將jQuery對象「轉換」成你的xjQuery對象。

你爲什麼首先做一個xJquery對象?爲什麼不做一個jQuery plugin

jQuery.fn.myfunc = function() { 
    this.append("<p>myfunc called</p>"); 
}; 

然後你可以做$("#maindiv").myfunc()

編輯:爲了「投」一個jQuery對象作爲xjQuery對象,你可以修改這樣的構造:

XjQuery = function(jq) 
{   
    jq = typeof jq === 'undefined' ? $("<div id=xjq>hallo</div>") : $(jq); 
    $.extend(this, jq); 
} 

然後,你可以這樣做:

$("#maindiv").find("#xjq").each(function() { 
    new XjQuery(this).myfunc(); 
}); 
+1

火箭是正確的,正確的向jQuery添加擴展的方法是通過插件。這些擴展名將在'$'對象上顯示爲普通方法。例如'$('#a-div-id')。myPluginMethod(anArgument,anotherArgument)' – 2012-04-20 15:03:30

+0

我忘了提及,[jQuery插件文檔](http://docs.jquery.com/Plugins/Authoring)。 – 2012-04-20 15:04:41

+0

我的擴展只是一個例子,我有更多不同的對象,將從jQuery擴展,每個對象都有不同的成員函數 – helmi 2012-04-20 15:06:40