2010-12-09 18 views
0

Cela devrait être facile. Comment écrire une fonction jquery qui obtient l'objet 'calling' et quelques params.écrire une fonction jquery qui accepte les paramètres et les objets

Mon code de fonction:

new function($) { 
    $.fn.addcolor = function(param1, param2, param3, param4) { 
    // here i would like to retrieve the 'caller' object (div.foo in this case) 

    } 
} (jQuery); 

Mon code 'appelle la fonction:

$('div.foo').click(function() { 
    $(this).addcolor(1, 2, 3, 4); 
}); 

je peux obtenir le params no problemo, mais je veux obtenir le contenu de la div. truc dans la fonction et ajoute du contenu.

+0

Supprimer 'new' de votre fonction d'emballage. – SLaks

+0

Pas vraiment une réponse à ma question. Cependant maintenant je suis curieux. :) Pourquoi devrais-je supprimer nouveau? – PeeHaa

+0

Lorsque je supprime une nouvelle erreur js sur la page: Erreur de syntaxe non interceptée Jeton inattendu ( – PeeHaa

Répondre

2

Vous recherchez this. Les plugins jQuery de $.fn sont des méthodes normales sur le prototype . (jQuery attribue $.fn à $.prototype)
Comme toute autre méthode, vous pouvez obtenir le contexte dans lequel il a été appelé en utilisant this.

+0

OMG si facile. sur moi pour ne pas essayer! Merci pour une bonne explication! – PeeHaa

2

Dans votre extension addcolor, this représentera le même objet jQuery par rapport auquel votre plugin a été appelé.

// v---jQuery object 
$(this).addcolor(1, 2, 3, 4); 

(function($) { 
    $.fn.addcolor = function(param1, param2, param3, param4) { 
    // here "this" is the same object 
    // this[ 0 ] to get the first DOM element 
    // this.each(function(... to iterate over the collection 
    } 
})(jQuery); 
2

En plugin jQuery, cet élément est référencé par ceci.

function($) { 
    $.fn.addcolor = function(param1, param2, param3, param4) { 
    // here i would like to retrieve the 'caller' object (div.foo in this case) 
    var divcontent = $(this).html(); 
    } 
} (jQuery); 
+2

Il n'est pas nécessaire d'insérer '$ (this)' dans le plugin puisque 'this' est une référence à l'objet jQuery lui-même. – user113716

+0

True, cet appel à jQuery peut être évité. Avec d'autres variables, je trouve qu'il est généralement plus sûr d'envelopper juste pour m'assurer que je gère réellement un objet jQuery. – Daff

1

this.whatever est une façon ...

Il y a aussi un objet arguments que vous pouvez appeler. à savoir: arguments.length ou arguments [ "parm"]

0

Pour étendre jQuery I utilisé:

(function($) { 
    $.fn.extend({ 
     addcolor: function(param1, param2, param3, param4) { 
      return this.empty().append(something); 
     } 
    }); 
})(jQuery); 
+0

Quelle est la différence entre votre code et le mien. (par exemple, étendre le nom du plugin)? – PeeHaa

+1

Aucun, je montre juste que vous pouvez utiliser 'ceci' en fonction. –