web-dev-qa-db-fra.com

Différence entre jQuery.extend et jQuery.fn.extend?

J'essaie de comprendre la syntaxe du plugin jquery, car je veux fusionner deux plugins en un seul. Le clignotant qui doit également pouvoir arrêter l'intervalle ou s'exécuter plusieurs fois.

Quoi qu'il en soit, cette syntaxe est-elle la même que

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);
        });
    },

ce

$.fn.blink = function(options)
    {

car il ressemble à la première (sans =) est un moyen de définir plusieurs méthodes à la fois. Est-ce correct? Aussi pendant que je suis ici Quelle serait la raison d'ajouter des éléments et de la logique à l'objet jquery?

jQuery.extend({
    timer: {
        global: [],
        guid: 1,
        dataKey: "jQuery.timer",

(cela vient du plugin timer)

80
Richard

jQuery.extend est utilisé pour étendre n'importe quel objet avec des fonctions supplémentaires, mais jQuery.fn.extend est utilisé pour étendre l'objet jQuery.fn, qui en fait ajoute plusieurs fonctions de plugin en une seule fois (au lieu d'affecter chaque fonction séparément).

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)
87
Philippe Leybaert
jQuery.extend({
    abc: function(){
        alert('abc');
    }
});

utilisation: $.abc(). (Aucun sélecteur requis comme $.ajax().)

jQuery.fn.extend({
    xyz: function(){
        alert('xyz');
    }
});

utilisation: $('.selector').xyz(). (Sélecteur requis comme $('#button').click().)

Il est principalement utilisé pour implémenter $.fn.each().

J'espère que ça aide.

70
Dinesh

Différence entre jQuery.extend et jQuery.fn.extend?

En fait, il n'y en a pas en dehors de leur référence de base. Dans la source jQuery , vous pouvez lire:

jQuery.extend = jQuery.fn.extend = function() { … };

Alors, comment ça marche? documentation se lit comme suit:

Fusionne le contenu de deux ou plusieurs objets ensemble dans le premier objet.

C'est juste un for-in-loop qui copie les propriétés, pimpé avec un drapeau pour récurser les objets imbriqués. Et une autre caractéristique:

Si un seul argument est fourni à $.extend(), cela signifie que l'argument cible a été omis

 // then the following will happen:
 target = this;

Donc, si la fonction est appelée sur jQuery elle-même (sans cible explicite), elle étendra l'espace de noms jQuery. Et si la fonction est appelée sur jQuery.fn (Sans cible explicite), elle étendra l'objet prototype jQuery où se trouvent toutes les méthodes (plugin).

19
Bergi

Ce billet de blog a une belle description:

$.fn.extend({
myMethod: function(){...}
});
//jQuery("div").myMethod();

$.extend({
myMethod2: function(){...}
});
//jQuery.myMethod2();

Citations:

En règle générale, vous devez étendre l'objet jQuery pour les fonctions et l'objet jQuery.fn pour les méthodes. Une fonction, contrairement à une méthode, n'est pas accessible directement depuis le DOM.

16
gavenkoa
$.fn.something= function{};

pointe vers le jQuery.prototype et permet d'accéder aux éléments dom via "this". Maintenant, vous pouvez utiliser $(selector).something(); Cela fonctionne donc comme une fonction de plugin comme $(selector).css();

$.something = function{};

ajoute une propriété ou une fonction à l'objet jQuery lui-même et vous ne pouvez pas utiliser "this" pour l'accès dom Maintenant, vous pouvez l'utiliser comme $.something(); cela fonctionne comme une fonction utilitaire comme $.trim()

mais

$.fn.extend({function1(), function2()}) and  $.extend({function1(), function2()}) 

permet d'ajouter plus d'une fonction en même temps.Elles peuvent également être utilisées pour fusionner deux littéraux d'objet au cas où nous fournirions plus d'un objet.

9
Shishir Arora