Более простой способ добавить методы к объектам 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');