Est-ce:
var contents = document.getElementById('contents');
Le même que celui-ci:
var contents = $('#contents');
Étant donné que jQuery est chargé?
Pas exactement!!
document.getElementById('contents'); //returns a HTML DOM Object
var contents = $('#contents'); //returns a jQuery Object
Dans 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 (les objets JavaScript de rappel ont une action similaire à celle des tableaux associatifs).
var contents = $('#contents')[0]; //returns a HTML DOM Object
Non.
L'appel de document.getElementById('id')
renverra un objet DOM brut.
L'appel de $('#id')
renverra un objet jQuery qui enveloppe l'objet DOM et fournit des méthodes jQuery.
Ainsi, vous ne pouvez appeler que des méthodes jQuery telles que css()
ou animate()
sur l'appel $()
.
Vous pouvez également écrire $(document.getElementById('id'))
, ce qui retournera un objet jQuery et sera équivalent à $('#id')
.
Vous pouvez obtenir l'objet DOM sous-jacent à partir d'un objet jQuery en écrivant $('#id')[0]
.
Proche, mais pas pareil. Ils obtiennent le même élément, mais la version de jQuery est encapsulée dans un objet jQuery.
L'équivalent serait ceci
var contents = $('#contents').get(0);
ou ca
var contents = $('#contents')[0];
Ceux-ci vont extraire l'élément de l'objet jQuery.
Une note sur la différence de vitesse. Joignez le snipet suivant à un appel onclick:
function myfunc()
{
var timer = new Date();
for(var i = 0; i < 10000; i++)
{
//document.getElementById('myID');
$('#myID')[0];
}
console.log('timer: ' + (new Date() - timer));
}
Remplacez-en une par une, puis l'autre. Dans mes tests,
document.getElementbyId en moyenne environ 5ms (fluctuant de
25ms
jusqu'à52ms
sur environ15 runs
)
D'autre part, le
jQuery en moyenne environ 200 ms (allant de
181ms
à222ms
sur environ15 runs
).De ce simple test, vous pouvez voir que le jQuery a pris environ 6 fois aussi longtemps.
Bien sûr, c’est fini sur 10000
itérations donc dans une situation plus simple, j’utiliserais probablement jQuery pour la facilité d’utilisation et toutes les autres choses intéressantes comme .animate
et .fadeTo
. Mais oui, techniquement getElementById
est un peu plus rapide.
Non. Le premier renvoie un élément DOM ou null, tandis que le second renvoie toujours un objet jQuery. L'objet jQuery sera vide si aucun élément avec l'id de contents
n'a été mis en correspondance.
L'élément DOM renvoyé par document.getElementById('contents')
vous permet de modifier le .innerHTML
(ou .value
), etc., mais vous devrez utiliser méthodes jQuery sur l'objet jQuery.
var contents = $('#contents').get(0);
Est plus équivalent, cependant si aucun élément avec l'id de contents
ne correspond, document.getElementById('contents')
renverra null, mais $('#contents').get(0)
renverra non défini.
L'un des avantages de l'utilisation de l'objet jQuery est que vous ne recevrez 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 le null
renvoyé par document.getElementById
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 récupérez est un objet jQuery spécial, qui est une collection de tous les contrôles correspondant à la requête.
Une partie de ce qui rend jQuery si pratique réside dans le fait que les méthodes MOST appelées sur cet objet et qui semblent être destinées à un contrôle, sont en réalité 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
Au cas où quelqu'un d'autre frappe ceci ... Voici une autre différence:
Si l'ID contient des caractères non pris en charge par le standard HTML (voir SO question here ), jQuery risque de ne pas le trouver, même si getElementById le fait.
Cela m'est arrivé avec un identifiant contenant des caractères "/" (ex: id = "a/b/c"), en utilisant Chrome:
var contents = document.getElementById('a/b/c');
a pu trouver mon élément mais:
var contents = $('#a/b/c');
n'a pas.
Au fait, la solution la plus simple était de déplacer cet identifiant dans le champ du nom. JQuery n'a eu aucun mal à trouver l'élément en utilisant:
var contents = $('.myclass[name='a/b/c']);
Comme la plupart des gens l’ont dit, la principale différence est qu’il est encapsulé dans un objet jQuery avec l’appel jQuery et l’objet DOM brut à l’aide de JavaScript. Bien entendu, l’objet jQuery est capable d’exécuter d’autres fonctions jQuery, mais si vous devez effectuer une simple manipulation DOM, telle que le style de base ou la gestion d’événements de base, la méthode JavaScript directe est toujours un peu plus rapide que jQuery, car Pas besoin de charger dans une bibliothèque externe de code construit sur JavaScript. Cela évite une étape supplémentaire.
var contents = document.getElementById('contents');
var contents = $('#contents');
Les extraits de code ne sont pas les mêmes. le premier retourne un objet Element
( source ). La seconde, l’équivalent jQuery, renverra un objet jQuery contenant une collection de zéro ou d’un élément DOM. ( documentation jQuery ). En interne, jQuery utilise document.getElementById()
pour plus d'efficacité.
Dans les deux cas, si plus d'un élément trouvé, seul le premier élément sera retourné.
Lors de la vérification du projet github pour jQuery, j'ai trouvé les extraits de ligne suivants, qui semblent utiliser les codes document.getElementById ( https://github.com/jquery/jquery/blob/master/src/core/init.js ligne 68 et suivantes)
// HANDLE: $(#id)
} else {
elem = document.getElementById( match[2] );
Une autre différence: getElementById
renvoie la correspondance première, tandis que $('#...')
renvoie une collection de correspondances - oui, le même identifiant peut être répété dans un document HTML.
De plus, getElementId
est appelé à partir du document, tandis que $('#...')
peut être appelé à partir d'un sélecteur. Ainsi, dans le code ci-dessous, document.getElementById('content')
renverra le corps entier, mais $('form #content')[0]
retournera à l'intérieur du formulaire.
<body id="content">
<h1>Header!</h1>
<form>
<div id="content"> My Form </div>
</form>
</body>
Il peut sembler étrange d'utiliser des identifiants en double, mais si vous utilisez quelque chose comme Wordpress, un modèle ou un plug-in peut utiliser le même identifiant que vous utilisez dans le contenu. La sélectivité de jQuery pourrait vous aider.
jQuery est construit sur JavaScript. Cela signifie que c'est juste du javascript quand même.
document.getElementById ()
La méthode document.getElementById () renvoie l'élément contenant l'attribut ID avec la valeur spécifiée et renvoie la valeur null si aucun élément avec l'ID spécifié n'existe. Un ID doit être unique dans une page.
Jquery $ ()
L'appel de jQuery () ou $ () avec un sélecteur id comme argument renverra un objet jQuery contenant une collection de zéro ou d'un élément DOM.Chaque valeur id ne doit être utilisée qu'une seule fois dans un document. Si plusieurs éléments ont reçu le même ID, les requêtes utilisant cet ID ne sélectionnent que le premier élément correspondant dans le DOM.
J'ai développé une base de données noSQL pour stocker les arborescences DOM dans les navigateurs Web, où les références à tous les éléments DOM de la page sont stockées dans un index court. Ainsi, la fonction "getElementById ()" n'est pas nécessaire pour obtenir/modifier un élément. Lorsque des éléments de l'arborescence DOM sont instanciés sur la page, la base de données attribue des clés primaires de substitution à chaque élément. C'est un outil gratuit http://js2dx.com
Toutes les réponses ci-dessus sont correctes. Au cas où vous voudriez le voir en action, n'oubliez pas que vous avez la console dans un navigateur où vous pouvez voir le résultat final de manière parfaitement claire:
J'ai un HTML:
<div id="contents"></div>
Allez à la console (cntrl+shift+c)
et utilisez ces commandes pour voir votre résultat clairement
document.getElementById('contents')
>>> div#contents
$('#contents')
>>> [div#contents,
context: document,
selector: "#contents",
jquery: "1.10.1",
constructor: function,
init: function …]
Comme nous pouvons le constater, dans le premier cas, nous avons obtenu la balise elle-même (à savoir, à proprement parler, un objet HTMLDivElement). Dans ce dernier cas, nous n’avons en réalité pas un objet simple, mais un tableau d’objets. Et comme mentionné par d'autres réponses ci-dessus, vous pouvez utiliser la commande suivante:
$('#contents')[0]
>>> div#contents