Более простой способ добавить методы к объектам jQuery, чем .data()?

Я хочу добавить настраиваемый метод к определенному объекту jQuery:

$('#DOMelement').customFunc(param); // not a reality

В настоящее время у меня есть:

var customFunc = function(param) { 
    // do something special
}
$('#DOMelement').data('customFunc', customFunc);

Кого я тогда называю, например:

var cF = $('#DOMelement').data('customFunc');
cF(param);

Все это работает, но это боль. Есть ли лучшее решение? Помимо написания обширного плагина?

Ответ 1

Ваша функция, похоже, не связана с каким-либо конкретным элементом, поэтому почему бы просто не сохранить ее в каком-то глобальном пространстве имен.

Если вы не хотите создавать другое, вы можете позаимствовать jQuery, если вы не будете ничего переписывать:

jQuery.cF = function(param) {
    // do something special
};

$.cF(param);

Ответ 2

Похоже на то, что вы хотите сделать плагин . Это не очень обширно. Взято из http://docs.jquery.com/Plugins/Authoring, вы можете просто сделать:

(function( $ ){
    $.fn.myPlugin = function() {

        // Do your awesome plugin stuff here

    };
})( jQuery );

Тогда вызов просто:

$('#DOMelement').myPlugin();

Я не верю, что вы должны помещать пользовательские функции в свойство data. Свойство data было построено с целью встраивания пользовательских невидимых данных в ваш HTML. Хотя я предполагаю, что вы можете поместить туда функции, я не уверен, что это совместимо. Кроме того, весь ваш код JavaScript будет встроен в ваш HTML-элемент.

(Взято из http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data-with-the-data-attributes)

Авторы могут включать данные для встроенных клиентских сценариев или серверных скриптов на сайте для обработки с использованием атрибутов data - * = "". Они никогда не будут затронуты браузерами и позволяют сценариям включать данные о элементах HTML, которые скрипты могут искать и обрабатывать.

Вот еще одна статья об использовании data: http://www.marcofolio.net/webdesign/html5_data-_attributes_are_great_and_you_know_it.html

Ответ 3

Вы можете использовать jQuery.extend().

В вашем конкретном случае вы будете расширять $, чтобы вы могли просто сделать это с помощью patrick до тех пор, пока будете осторожны, чтобы не переопределять и существующие функции.

Ответ 4

Попробуйте следующее:

$.fn.call = function(){};

Затем создайте функцию для определенного элемента:

$('#some_id .some-class').call.myCustomFunction = function(arg1,arg2){ ... };

Теперь, когда вы хотите называть его:

$('#some_id .some-class').call.myCustomFunction('a','b');