288 votes

Comment trouver si la div avec un id spécifique existe dans jQuery ?

J'ai une fonction qui ajoute un fichier <div> à un élément lors d'un clic. La fonction récupère le texte de l'élément cliqué et l'assigne à une variable appelée name . Cette variable est ensuite utilisée comme <div> id de l'élément ajouté.

J'ai besoin de voir si un <div> id con name existe déjà avant que j'ajoute l'élément, mais je ne sais pas comment le trouver.

Voici mon code :

$("li.friend").live('click', function() {
  name = $(this).text();

  // if-statement checking for existence of <div> should go here
  // If <div> does not exist, then append element
    $("div#chatbar").append("<div class='labels'><div id='" + name + "' style='display:none;'></div>" + name + "</div>");

  // Else
    alert('this record already exists');
});

Cela semble assez simple, mais j'obtiens l'erreur " Fin de fichier inattendue lors de la recherche du nom de la classe". . Je n'ai aucune idée de ce que cela signifie.

if (document.getElementById(name)) {
  $("div#" + name).css({bottom: '30px'});
} else {
  $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
}

De plus, je veux pouvoir supprimer cet élément si je le ferme, ce qui devrait alors supprimer l'élément div id [name] du document mais .remove() ne le fait pas.

Voici le code pour cela :

$(".mini-close").live('click', function(){
  $(this).parent().remove();
});

J'ai ajouté .mini-close à la fonction append comme enfant de .labels il y avait donc un moyen de fermer la fenêtre de l'annexe. <div> si nécessaire. Après avoir cliqué sur .mini-close et en essayant de cliquer à nouveau sur le même nom à partir de li.friends il trouve toujours le div id [name] et renvoie la première partie de mon if déclaration.

0 votes

La fin inattendue d'un fichier se résume généralement à une erreur de syntaxe quelque part. $("div#" + name).css({bottom: '30px'}); est erronée, elle devrait être $("div#" + name).css('bottom', '30px');

0 votes

Remove() détache l'élément de l'arbre DOM mais ne le détruit pas, donc une recherche par ID le trouvera toujours, si vous l'aviez assigné à une variable, il serait toujours là, etc. La solution ici est la suivante : si vous le trouvez, ajoutez-le à la div correcte (s'il est déjà là, rien ne se passera, s'il a été détaché/supprimé, il réapparaîtra), s'il n'est pas trouvé, alors créez-le.

0 votes

Duplicata de stackoverflow.com/q/31044/12101554 (mais je ne signale pas les doublons car il s'agit d'une question ancienne et populaire) (je voulais juste les relier entre elles)

608voto

Nick Craver Points 313913

Vous pouvez utiliser .length après le sélecteur pour voir s'il correspond à des éléments, comme ceci :

if($("#" + name).length == 0) {
  //it doesn't exist
}

La version complète :

$("li.friend").live('click', function(){
  name = $(this).text();
  if($("#" + name).length == 0) {
    $("div#chatbar").append("<div class='labels'><div id='" + name + "' style='display:none;'></div>" + name + "</div>");
  } else {
    alert('this record already exists');
  }
});

Ou, la version non-jQuery pour cette partie (puisque c'est un ID) :

$("li.friend").live('click', function(){
  name = $(this).text();
  if(document.getElementById(name) == null) {
    $("div#chatbar").append("<div class='labels'><div id='" + name + "' style='display:none;'></div>" + name + "</div>");
  } else {
    alert('this record already exists');
  }
});

109 votes

Beaucoup de jQuery dans la partie non jQuery :p

0 votes

Nick - cela ne fonctionne pas pour moi. Pendant le dépannage j'ai alerté la longueur du div id de [name] mais il ne le trouve jamais.

0 votes

@sadmicrowave - Pouvez-vous afficher un exemple de balisage ? C'est assez simple, donc ça devrait fonctionner assez facilement.

70voto

philo Points 661

La réponse de Nick est claire. Vous pouvez également utiliser la valeur de retour de getElementById directement comme condition, plutôt que de la comparer à null (les deux méthodes fonctionnent, mais je trouve personnellement ce style un peu plus lisible) :

if (document.getElementById(name)) {
  alert('this record already exists');
} else {
  // do stuff
}

0 votes

Vous avez raison, cela fonctionne très bien (j'ai dû faire une bêtise). Cependant, lorsque je remplace le alert() par autre chose, j'obtiens une erreur disant : "unexpected end of file while searching for class name". Pourquoi cela se produit-il ? Voir mon OP pour savoir par quoi je remplace ma fonction alert()...

0 votes

Quelqu'un a-t-il des idées supplémentaires ?

2 votes

L'erreur semble indiquer qu'il manque une parenthèse ou un point-virgule.

36voto

Tapan kumar Points 877

Essayez de vérifier la longueur du sélecteur, s'il vous renvoie quelque chose alors l'élément doit exister sinon non.

if( $('#selector').length )         // use this if you are using id to check
{
     // it exists
}

if( $('.selector').length )         // use this if you are using class to check
{
     // it exists
}

Utilisez la première condition if pour l'id et la seconde pour la classe.

24voto

Karim Points 161
if($("#id").length) /*exists*/

if(!$("#id").length) /*doesn't exist*/

5voto

Hariprasath Points 153

Vous pouvez vérifier en utilisant jquery simplement comme ceci :

if($('#divId').length!==0){
      Your Code Here
}

1 votes

If($('#divId').length!= 0){ Your Code Here } ceci serait correct

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