Я пытаюсь понять синтаксис плагина jquery, потому что хочу объединить два плагина в один. Мигатель, который также должен иметь возможность останавливать интервал или запускаться несколько раз.
В любом случае, совпадает ли этот синтаксис с
jQuery.fn.extend({
everyTime: function(interval, label, fn, times) {
return this.each(function() {
jQuery.timer.add(this, interval, label, fn, times);
});
},
oneTime: function(interval, label, fn) {
return this.each(function() {
jQuery.timer.add(this, interval, label, fn, 1);
});
},
это
$.fn.blink = function(options)
{
потому что похоже, что первый (без =) - это способ установить сразу несколько методов. Это правильно? Также, пока я здесь. Какая причина для добавления элементов и некоторой логики в объект jquery?
jQuery.extend({
timer: {
global: [],
guid: 1,
dataKey: "jQuery.timer",
(это из плагина таймера)
Ответы:
jQuery.extend используется для расширения любого объекта дополнительными функциями, но jQuery.fn.extend используется для расширения объекта jQuery.fn, который фактически добавляет несколько функций плагина за один раз (вместо того, чтобы назначать каждую функцию отдельно).
jQuery.extend :
var obj = { x: function() {} } jQuery.extend(obj, { y: function() {} }); // now obj is an object with functions x and y
jQuery.fn.extend :
jQuery.fn.extend( { x: function() {}, y: function() {} }); // creates 2 plugin functions (x and y)
источник
jQuery.extend({ abc: function(){ alert('abc'); } });
Использование:
$.abc()
. (Селектор вроде не требуется$.ajax()
.)jQuery.fn.extend({ xyz: function(){ alert('xyz'); } });
Использование:
$('.selector').xyz()
. (Требуется селектор вроде$('#button').click()
.)В основном это используется для реализации
$.fn.each()
.Я надеюсь, что это помогает.
источник
Собственно, кроме их базовой ссылки, ничего нет. В исходном коде jQuery вы можете прочитать:
jQuery.extend = jQuery.fn.extend = function() { … };
Итак, как это работает? В документации говорится:
Это просто цикл for-in-loop, который копирует свойства, дополненный флагом для рекурсии вложенных объектов. И еще одна особенность:
// then the following will happen: target = this;
Поэтому, если функция вызывается
jQuery
сама по себе (без явной цели), она расширяет пространство имен jQuery. И если функция вызываетсяjQuery.fn
(без явной цели), она расширяет объект-прототип jQuery, в котором расположены все методы (плагина).источник
У этого сообщения в блоге есть хорошее описание:
$.fn.extend({ myMethod: function(){...} }); //jQuery("div").myMethod(); $.extend({ myMethod2: function(){...} }); //jQuery.myMethod2();
Цитаты:
Как правило, вы должны расширять объект jQuery для функций и объект jQuery.fn для методов. К функции, в отличие от метода, нет прямого доступа из DOM.
источник
directly from the DOM
относится к очень простой концепции JavaScript вызова функции и вызова свойства / прототипа объекта (в оболочке jQuery вокруг собственных объектов DOM). Посмотрите пример и попытайтесь найти разницу и подумайте, почему код в примерах не является взаимозаменяемым.$.fn.something= function{};
указывает на jQuery.prototype и позволяет получить доступ к элементам dom через "this". Теперь вы можете использовать
$(selector).something();
Итак, это работает как функция плагина, например$(selector).css();
$.something = function{};
добавляет свойство или функцию к самому объекту jQuery, и вы не можете использовать this для доступа к dom. Теперь вы можете использовать его как
$.something()
; это работает как функция полезности как$.trim()
но
позволяет добавлять более 1 функции одновременно, а также их можно использовать для объединения двух литералов объектов, если мы предоставляем более одного объекта.
источник