690 votes

document.getElementById vs jQuery $()

C'est ça :

var contents = document.getElementById('contents');

La même chose que ça :

var contents = $('#contents');

Étant donné que jQuery est chargé ?

12 votes

En plus des points soulevés dans les réponses, la version jQuery est app. 100x plus lente.

8 votes

Est-ce que cela est prouvé quelque part ?

13 votes

@torazaburo En fait, la version de jQuery n'est même pas 3 fois plus lente (du moins avec la dernière version de Chrome). Voir : jsperf.com/getelementbyid-vs-jquery-id/44

1153voto

John Hartsock Points 36565

Pas exactement !

document.getElementById('contents'); //returns a HTML DOM Object

var contents = $('#contents');  //returns a jQuery Object

En jQuery, pour obtenir le même résultat que document.getElementById vous pouvez accéder à l'objet jQuery et obtenir le premier élément de l'objet (rappelez-vous que les objets JavaScript agissent comme des tableaux associatifs).

var contents = $('#contents')[0]; //returns a HTML DOM Object

25 votes

Pour toute personne intéressée document.getElementBy ne fonctionne pas correctement dans <IE8. Il reçoit également des éléments par name donc vous pourriez théoriquement argumenter document.getElementById est non seulement trompeuse, mais peut aussi renvoyer des valeurs incorrectes. Je pense que @John l'a déjà fait, mais j'ai pensé que cela ne ferait pas de mal de l'ajouter.

18 votes

Faites attention si votre identifiant n'est pas fixé. $('#'+id)[0] n'est pas égal à document.getElementById(id) parce que id peut contenir des caractères qui sont traités de manière spéciale dans jQuery !

1 votes

C'était très utile - je ne le savais pas ! Je suis sûr que j'ai déjà utilisé avant, cependant, c'est ce qui me déconcerte. Hé, on apprend quelque chose tous les jours ! Merci !

158voto

SLaks Points 391154

Non.

Appel à document.getElementById('id') retournera un objet DOM brut.

Appel à $('#id') renvoie un objet jQuery qui englobe l'objet DOM et fournit des méthodes jQuery.

Ainsi, vous pouvez seulement appeler des méthodes jQuery comme css() o animate() sur le $() appeler.

Vous pouvez également écrire $(document.getElementById('id')) qui renverra un objet jQuery, ce qui est équivalent à $('#id') .

Vous pouvez obtenir l'objet DOM sous-jacent à partir d'un objet jQuery en écrivant $('#id')[0] .

4 votes

Savez-vous par hasard lequel des deux est le plus rapide : $(document.getElementById('element')) ou $('#element') ?

10 votes

@IvanIvkovic : La première est plus rapide, car elle n'implique pas l'analyse syntaxique des chaînes de caractères.

1 votes

@SLaks Quelle est la principale différence entre un objet DOM brut et un objet jQuery ? En utilisant l'objet jQuery, nous avons la possibilité d'appliquer les méthodes jQuery ?

35voto

RightSaidFred Points 7276

Proche, mais pas identique. Ils obtiennent le même élément, mais la version jQuery est enveloppée dans un objet jQuery.

L'équivalent serait le suivant

var contents = $('#contents').get(0);

ou ceci

var contents = $('#contents')[0];

Ceux-ci vont extraire l'élément de l'objet jQuery.

17voto

Matt Points 38395

Non. La première renvoie un élément DOM, ou null, alors que la seconde renvoie toujours un objet jQuery. L'objet jQuery sera vide si aucun élément avec l'id de contents a été apparié.

L'élément DOM retourné par document.getElementById('contents') vous permet de faire des choses telles que changer le .innerHTML (o .value ), etc., mais vous devrez utiliser la fonction Méthodes jQuery sur l'objet jQuery.

var contents = $('#contents').get(0);

est plus équivoque, cependant si aucun élément avec l'id de contents est apparié, document.getElementById('contents') retournera null, mais $('#contents').get(0) retournera indéfini.

L'un des avantages de l'utilisation de l'objet jQuery est que vous n'obtiendrez aucune erreur si aucun élément n'est renvoyé, car un objet est toujours renvoyé. Cependant, vous obtiendrez des erreurs si vous essayez d'effectuer des opérations sur l'objet null retourné par document.getElementById

15voto

Andrey Points 865

Non, en fait le même résultat serait :

$('#contents')[0] 

jQuery ne sait pas combien de résultats seront renvoyés par la requête. Ce que vous obtenez en retour est un objet jQuery spécial qui est une collection de tous les contrôles qui correspondent à la requête.

Une partie de ce qui rend jQuery si pratique est que la plupart des méthodes appelées sur cet objet qui semblent être destinées à un seul contrôle, sont en fait dans une boucle appelée sur tous les membres de la collection.

Lorsque vous utilisez la syntaxe [0], vous prenez le premier élément de la collection interne. À ce stade, vous obtenez un objet DOM

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X