Шаблон плагин JQuery делает ряд вещей:
шаблонный устанавливает $
знак на JQuery, чтобы избежать плагин конфликтов (например, Prototype также использует $
как JQuery, так как вы убедитесь, что ваш плагин использует JQuery и не что-то другое Проходите JQuery в Immediately Invoked Function Expression вроде так):
(function($) {
$.fn.yourPlugin = function() {
// Do stuff!
};
})(jQuery); // pass jQuery so the $ is jQuery and not something else in the function
Но это не решает все наши проблемы, так как undefined
в ECMAScript 3 не может быть undefined
(то есть, это изменчивый-он может быть изменено oth эр скрипты), поэтому мы добавим еще один параметр:
(function($, undefined) {
$.fn.yourPlugin = function() {
// Do stuff!
};
})(jQuery); // note that we're not passing any value to make it truly undefined
шаблонный также проходит window
и document
как локальные переменные так, что они будут немного быстрее, и это также добавляет немного кода, так что плагин может быть как и другие объекты jQuery. Теперь мы закончили с шаблоном кода:
;(function ($, window, document, undefined) {
var pluginName = "highlighter";
var defaults = {
};
function Plugin (element, options) {
this.element = element;
this.settings = $.extend({}, defaults, options);
this._defaults = defaults;
this._name = pluginName;
this.init();
}
$.extend(Plugin.prototype, {
init: function() {
}
});
// A really lightweight plugin wrapper around the constructor,
// preventing against multiple instantiations
$.fn[ pluginName ] = function (options) {
this.each(function() {
if (!$.data(this, "plugin_" + pluginName)) {
$.data(this, "plugin_" + pluginName, new Plugin(this, options));
}
});
// chain jQuery functions
return this;
};
})(jQuery, window, document);
Теперь давайте рассмотрим, как выделить div и изменить шрифт. Во-первых, вы можете расширить свои настройки по умолчанию с некоторыми свойствами:
// Here we create the defaults:
var defaults = {
bgColor: 'yellow',
font: 'normal small-caps normal 16px/1.4 Georgia'
};
В плагин обертку, когда ваш плагин конкретизируется, он также вызывает init()
функцию:
// "options" parameter may contain the user's values to override defaults
$.fn[ pluginName ] = function (options) {
// for each selected element
this.each(function() {
// ...
// When "new Plugin()" -> init() is called in the function, see "function Plugin()"
$.data(this, "plugin_" + pluginName, new Plugin(this, options));
}
}
шаблонный также делает один другой важная вещь: он сохраняет настройки пользователя в this.settings
вместо this.defaults
, чтобы настройки по умолчанию плагина не были перезаписаны пользовательскими настройками пользователя.
new Plugin()
вызывает функцию init()
, где мы можем работать с нашей магией. Чтобы получить доступ к настройкам по умолчанию или пользовательских, мы просто должны получить доступ к this.settings
:
init: function() {
// Set the highlight and font.
$(this.element).css({
'background-color': this.settings.bgColor,
'font': this.settings.font
});
}
См скрипки here.
Что вы подразумеваете под подсветкой? Как цвет фона? Или как анимированная подсветка jQuery UI? – arao6
Да плагин позволяет мне указать только цвет фона и собственный шрифт.Если в плагине не могут быть заданы значения по умолчанию – CuriousDev
Вот пример скрипта: http://jsfiddle.net/5h68swxq/2/ В принципе, свойства по умолчанию устанавливаются в конструкторе в 'this._defaults = defaults'. Однако объект настроек расширяет объект по умолчанию на 'this.settings = $ .extend ({}, defaults, options);', чтобы вы не перезаписывали настройки по умолчанию для других элементов. При инициализации вы применяете настройки с помощью функции 'css' jQuery. – arao6