2012-04-20 2 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().

EDIT: "бросить" объект 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

Rocket является правильным, право способ добавления расширений в jQuery через плагины. Эти расширения будут отображаться как обычные методы для объекта '$'. Например, '$ ('# a-div-id'). MyPluginMethod (anArgument, anotherArgument)' –

+0

Я забыл упомянуть [документацию jQuery для плагинов] (http://docs.jquery.com/Plugins/Authoring). –

+0

Мое расширение - это просто пример. У меня больше разных объектов, которые будут расширены из jQuery, и каждый объект имеет разные функции-члены. – helmi

Смежные вопросы