# 27: Bygg en enkel jQuery-plugin - CSS-triks

Anonim

Nå som vi har sett på å bruke jQuery-plugins, er det absolutt verdt å forstå hvordan man også bygger dem. Vi har allerede kort berørt det faktum at du kan utvide det opprinnelige jQuery-objektet hvis du vil. Akkurat som:

$.myFunction = function() ( console.log("I am a function on the jQuery object."); ); // call it $.myFunction();

Men det er ikke spesielt nyttig i seg selv. For å lage en ny metode for jQuery som du kan ringe på et sett med elementer, må du gjøre det slik:

$.fn.myMethod = function() ( // I'm a new method ));

Dette er nøyaktig det samme som å bruke .prototype på jQuery, og for nysgjerrige kan du lese mer om det her. Å gjøre det på den måten betyr at vi kan bruke den nye metoden på et sett med elementer. Som:

$("li").myMethod();

Du kan gjøre hva du vil ved siden av denne metoden, men for å være en god jQuery plugin-bygningsborger, bør du returnere det samme settet med elementer tilbake fra pluginet.

$.fn.myMethod = function() ( // Do some stuff return this; ));

På den måten vil det fungere med kjetting. Hvis du ikke gjør det, og noen prøvde noe sånt som:

$ (“Li”). MyMethod (). Show ();

Det ville mislykkes, fordi .show()det egentlig ikke ble kalt noe. Ofte er jQuery-plugins utformet for å løkke over hvert element slik at du har direkte tilgang til hvert enkelt element i settet for å gjøre som du trenger.

En annen god statsborger ting å gjøre er å pakke inn et plugin i et umiddelbart påkalt funksjonsuttrykk og sende inn jQuery som en parameter til det. På den måten kan du bruke $ inne i plugin-koden din tryggere. Det er fordi i noen situasjoner er $ shorthand for jQuery utilgjengelig (f.eks. Har en bruker brukt jQuery i "kompatibilitetsmodus").

Med begge de to siste tingene på plass blir en plugin-struktur:

(function($) ( $.fn.myMethod = function() ( return this.each(function() ( // do things )); ); ))(jQuery)

I screencast endte vi opp med å bygge et enkelt plugin for å legge til en pil på slutten av ethvert element.

Se Pen rwasH av Chris Coyier (@chriscoyier) på CodePen

Selvfølgelig kan det bli mer komplekst ettersom ambisjonen din om å gjøre mer øker.