322 votes

Vérifier si un div existe avec jquery

Oui, je sais que cette question a été posée à plusieurs reprises. Mais, elle me perturbe, car les résultats sur google pour cette recherche montrent différentes méthodes (listées ci-dessous)

$(document).ready(function() {
    if ($('#DivID').length){
        alert('Found with Length');
    }

    if ($('#DivID').length > 0 ) {
        alert('Found with Length bigger then Zero');
    }

    if ($('#DivID') != null ) {
        alert('Found with Not Null');
    }
});

Laquelle de ces trois méthodes est la bonne pour vérifier si la division existe ?

EDIT : C'est dommage de voir que les gens ne veulent pas apprendre quelle est la meilleure approche parmi les trois méthodes différentes. Cette question n'est pas vraiment sur "Comment vérifier si un div existe" mais c'est sur quelle méthode est la meilleure, et, si quelqu'un peut expliquer, pourquoi elle est meilleure ?

16 votes

@miku - il ne s'agit pas d'un doublon, puisqu'il s'agit de déterminer la manière correcte, et non pas comment faire.

1 votes

Felix kling - tous les 3 travaillent sur jsfiddler jsfiddle.net/k6aAh/1

0 votes

@Dementic, oui bien sûr - mais c'est très similaire - et si la réponse du haut était fausse, je suppose que l'une des 73 694 paires d'yeux aurait déjà repéré une erreur.

192voto

karim79 Points 178055

Le premier est le plus concis, j'irais avec ça. Les deux premières sont identiques, mais la première est juste un peu plus courte, ce qui vous permet d'économiser des octets. La troisième est tout simplement fausse, car cette condition sera toujours évaluée comme vraie parce que l'objet sera nunca être null ou falsy d'ailleurs.

1 votes

A moins que dans le code ci-dessus ils aient obtenu quelque chose comme $('#DivID') = null ; Lol)

9 votes

"Le premier est le plus concis, j'irais avec ça.{...}, donc vous économiserez des octets", très mauvais état d'esprit. Code maintenable > code concis.

2 votes

@NiklasEkman - Je suis d'accord pour dire que la maintenabilité est plus importante que la précision du code, mais je ne généralisais pas. Je suppose que je n'ai pas été assez clair. Dans le cas du test de la longueur d'une collection, pour les positifs non nuls il me semble que .length vainc .length > 0 donc c'est un peu un double gain. Merci quand même de l'avoir signalé.

108voto

Alex Key Points 5196

Si vous vérifiez simplement l'existence d'un identifiant, il n'est pas nécessaire d'entrer dans le système d'information. jQuery vous pourriez simplement :

if(document.getElementById("yourid") !== null)
{
}

getElementById renvoie à null s'il ne peut pas être trouvé.

Référence .

Si toutefois vous prévoyez d'utiliser le jQuery un objet plus tard, je dirais :

$(document).ready(function() {
    var $myDiv = $('#DivID');

    if ( $myDiv.length){
        //you can now reuse  $myDiv here, without having to select it again.
    }

});

Un sélecteur renvoie toujours un jQuery donc il ne devrait pas être nécessaire de vérifier la présence de l'objet null (Je serais intéressé de savoir s'il existe un cas limite où il faut vérifier pour null - mais je ne pense pas qu'il y en ait).

Si le sélecteur ne trouve rien, alors length === 0 qui est "falsy" (lorsqu'il est converti en bool, il est faux). Ainsi, s'il trouve quelque chose, cela devrait être "vrai" - il n'est donc pas nécessaire de vérifier si > 0, mais seulement si c'est "vrai".

0 votes

Si vous voulez vous faire mal à la tête, il y a une question intéressante sur l'objet nul en JS stackoverflow.com/questions/801032/null-object-in-javascript

0 votes

Si vous utilisez jQuery, je ne vois pas de raison d'utiliser getElementById Il n'est pas nécessaire d'utiliser le système, à moins que vous n'ayez vraiment besoin d'une amélioration des performances (par exemple, dans une longue boucle ou autre, mais je ne vois pas comment cela pourrait se produire, que vous ayez besoin d'exécuter des milliers de requêtes de sélection encore et encore). C'est juste beaucoup plus verbeux, au cours d'un grand nombre de javascript qui s'ajoute vraiment à plus d'espace et moins de lisibilité.

0 votes

C'est vrai, je suis d'accord avec votre point de vue @jamietre J'utilise principalement la version jQuery, car je suis probablement en train d'utiliser l'objet jq ailleurs. Cependant, si vous savez que vous allez toujours utiliser un paramètre ID et que tout ce que vous faites est de vérifier l'existence d'un élément, avoir l'objet jQuery n'est pas d'une grande aide (car il ne fait qu'envelopper getElementById). Je suppose que l'autre avantage en termes de performances (si la vérification de l'existence est le seul besoin de jQ - ce qui est probablement assez rare) est de ne même pas avoir à télécharger la bibliothèque du tout. Vous avez raison, getElementById est la plupart du temps inutilement verbeux, mais il est bon de connaître une alternative.

9voto

tskuzzy Points 19279

Comme l'a mentionné karim79, la première est la plus concise. Cependant, je pourrais argumenter que la seconde est plus compréhensible car il n'est pas évident/connu de certains programmeurs Javascript/jQuery que les valeurs non-zéro/faux sont évaluées à true dans les déclarations if. Et pour cette raison, la troisième méthode est incorrecte.

1 votes

Je dirais que la plupart des développeurs JavaScript savent qu'un nombre entier positif non nul est considéré comme "vrai", mais ce n'est que mon point de vue :)

2 votes

Je dirais que TOUS les développeurs Javascript devrait le savent. Mais de nos jours, beaucoup de gens développent presque exclusivement en "jQuery" et n'ont pas les bases du Javascript. Mais c'est une toute autre discussion :P

1 votes

Désaccord. Les tests de véracité sont assez fondamentaux en javascript. Bien que cela puisse sembler étrange si vous êtes plus familier avec un autre langage qui n'a pas ce concept, c'est extrêmement commun et une fois que vous y êtes habitué, cela améliore la lisibilité.

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