[JavaScript] JQuery return object

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • SideShow
  • Registratie: Maart 2004
  • Laatst online: 16-06 15:55

SideShow

Administrator

Topicstarter
Hallo

Ik zit met een onduidelijkheid ivm wat JQuery nu eigenlijk returnt:

Aanschouw deze console:

Afbeeldingslocatie: http://dl.dropbox.com/u/38282964/Untitled-1.gif

Hoe komt het dat, ze op het eerste zicht gewoon alletwee het DOM element returnen, maar er bij $(x) dan wel zoveel methods beschikbaar zijn.

Je kan toch maar methods gebruiken die de functie/object terug geeft?
Ik zou verwachten dat $(x) een object teruggeeft met functies erin, maar in de console blijkt dit niet zo en is het ook gewoon het element.

Met andere woorden: hoe kan de fluent interface werken (.show) als $(x) dit niet terug geeft?

Ik vermoed dat JQuery intern werkt met een stack van elementen of iets dergelijks, gezien functies als .end, maar toch, dit vind ik vreemd

[ Voor 14% gewijzigd door SideShow op 01-05-2012 19:14 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik heb even zo snel de link niet maar google eens op "10 things I learned" + jquery + irish. Dat zou een video moeten geven die 't, if I recall correctly, wel uit moet leggen (en meer).

Edit: eerste hit dus :P Ik kan 't alleen niet verifiëren gezien ik hier op een phone zit :P

[ Voor 28% gewijzigd door RobIII op 01-05-2012 19:40 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Devilly
  • Registratie: Januari 2009
  • Niet online
RobIII schreef op dinsdag 01 mei 2012 @ 19:37:
Ik heb even zo snel de link niet maar google eens op "10 things I learned" + jquery + irish. Dat zou een video moeten geven die 't, if I recall correctly, wel uit moet leggen (en meer).
Ik neem aan dat je deze bedoelde: http://paulirish.com/2010...d-from-the-jquery-source/. Ik ken hem ook nog niet, bedankt voor de tip. ;)

@ RobIII: leuk hoor, even snel je post aanpassen. }:|

[ Voor 6% gewijzigd door Devilly op 01-05-2012 19:41 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Devilly schreef op dinsdag 01 mei 2012 @ 19:39:
[...]

@ RobIII: leuk hoor, even snel je post aanpassen. }:|
:P :Y)

Als ik me niet vergis is er ook nog een tweede deel van ;)

edit (again :P) : :X :X Da's dus de tweede hit O-)

[ Voor 21% gewijzigd door RobIII op 01-05-2012 20:27 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • SideShow
  • Registratie: Maart 2004
  • Laatst online: 16-06 15:55

SideShow

Administrator

Topicstarter
Hoi .. ik heb met interesse het eerste filmpje bekeken.
Het antwoord zat er echter niet in.

Na wat verder zoeken, ben ik hierop terecht gekomen:
http://dean.edwards.name/weblog/2006/11/hooray/

Conclusie: het jQuery object is gewoon object die erft van Array, en functies aanbiedt via prototyping.

Thanks all

[ Voor 11% gewijzigd door SideShow op 01-05-2012 20:49 ]


Acties:
  • 0 Henk 'm!

  • phex
  • Registratie: Oktober 2002
  • Laatst online: 12-09 11:42
De eerste keer spreek je het aan via de DOM en de 2e keer via jQuery.
Show() is een jQuery methode, dus zodoende.

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
jQuery wrapt een object heen om je dom element, simpel gezegd.
(/me wacht op een uitgebreide uitleg van R4gnax.)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

SideShow schreef op dinsdag 01 mei 2012 @ 19:11:
Hoe komt het dat, ze op het eerste zicht gewoon alletwee het DOM element returnen, maar er bij $(x) dan wel zoveel methods beschikbaar zijn.
jQuery returnt geen DOM elementen, maar een jQuery object. Zo'n object ziet er op het eerste gezicht uit als een Array gevuld met DOM elementen: het heeft een .length property, en methods als slice, sort en push. Deze methods passen het object aan: het aantal elementen of de volgorde veranderd.

Het object heeft ook andere methods die effect hebben op de DOM elementen zelf: on, off, show, hide, etc.

getElementsByTagName returnt ook iets wat op een Array lijkt maar het niet is: een NodeList.

Beide objecten zien er in het console hetzelfde uit, vandaar de verwarring, denk ik.

Acties:
  • 0 Henk 'm!

  • SideShow
  • Registratie: Maart 2004
  • Laatst online: 16-06 15:55

SideShow

Administrator

Topicstarter
Inderdaad. Ondertussen had ik al door dat het om Array-afgeleiden gaat :-)

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Grijze Vos schreef op woensdag 02 mei 2012 @ 16:36:
jQuery wrapt een object heen om je dom element, simpel gezegd.
(/me wacht op een uitgebreide uitleg van R4gnax.)
Dat is inderdaad in de regel wat jQuery doet. De technische details zijn voor de gemiddelde jQuery gebruiker niet echt interessant meer, maar het is wel iets meer dan een simpele wrapper om een array DOM elementen en ook niet een standaard prototypal inheritance van Array of NodeList. jQuery wordt namelijk bovenop de Sizzle selector engine gezet.

Vind je de internals van jQuery interessant, dan kun je ook eens naar de Decoding jQuery reeks van blog artikelen kijken. Ze gaan daar o.a. in op hoe het jQuery.fn onderdeel dat functies op een jQuery selectie aanbiedt, in elkaar steekt.
Pagina: 1