2012-04-20 50 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