Comment savoir si div avec un identifiant spécifique existe dans jQuery?

266

J'ai une fonction qui ajoute un <div>à un élément au clic. La fonction obtient le texte de l'élément cliqué et l'assigne à une variable appelée name. Cette variable est ensuite utilisée comme<div> id élément de l'élément ajouté.

Je dois voir si <div> idavecname existe déjà avant d'ajouter 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 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 ensuite le supprimer 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 d'ajout en tant qu'enfant de .labelsdonc il y avait un moyen de fermer l'ajout <div>si nécessaire. Après avoir cliqué .mini-closeet tenté de cliquer à nouveau sur le même nom, li.friendsil trouve toujours le div id [name]et renvoie la première partie de ma ifdéclaration.

sadmicrowave
la source
Une fin de fichier inattendue se résume généralement à une erreur de syntaxe quelque part. $("div#" + name).css({bottom: '30px'});est faux, il devrait l'être$("div#" + name).css('bottom', '30px');
Jay Irvine
Remove () détache l'élément de l'arborescence DOM mais ne le détruit pas, donc une recherche par ID le trouvera toujours, si vous l'aviez affecté à une variable il serait toujours là, etc. La solution ici est que si vous trouvez-le, ajoutez-le à la bonne div (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é, puis créez-le.
Jay Irvine

Réponses:

540

Vous pouvez utiliser .lengthaprè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');
  }
});
Nick Craver
la source
98
beaucoup de jQuery dans la partie non-jQuery: p
jAndy
@Nick - cela ne fonctionne pas pour moi. Lors du dépannage, j'ai alerté de la longueur du div id de [nom] mais il ne le trouve jamais.
sadmicrowave
8
vérifier == 0 n'est pas nécessaire si ($ ("#" + nom) .length) {} fonctionne très bien.
ScottE
3
@ScottE - C'est l'inverse cependant, vous voulez dire !$("#"+name).length):)
Nick Craver
1
Je pense que vous devriez faire ===au lieu de voir ==.
danger89
66

La réponse de Nick le cloue. Vous pouvez également utiliser la valeur de retour de getElementById directement comme condition, plutôt que de la comparer à null (dans les deux cas, cela fonctionne, mais personnellement, je trouve ce style un peu plus lisible):

if (document.getElementById(name)) {
  alert('this record already exists');
} else {
  // do stuff
}
philo
la source
vous avez raison, cela fonctionne très bien (je devais faire quelque chose de stupide). Cependant, lorsque je remplace l'alerte () par autre chose, j'obtiens une erreur disant: "fin de fichier inattendue lors de la recherche du nom de classe". Pourquoi cela arrive-t-il? Voir mon OP pour ce que je remplace ma fonction alert () par ...
sadmicrowave
des idées supplémentaires de quelqu'un?
sadmicrowave
2
L'erreur sonne comme s'il vous manquait un crochet ou un point-virgule.
Rikki
@Philo Et si vous cherchez à faire correspondre des identifiants spécifiques détenus dans un tableau à
Beaniie
Vous avez plusieurs identifiants dans un tableau et vous souhaitez trouver chacun d'eux? L'approche par force brute serait de boucler sur le tableau et d'appeler getElementById pour chacun d'eux.
philo
31

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

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 id et la seconde pour class.

Tapan kumar
la source
21
if($("#id").length) /*exists*/

if(!$("#id").length) /*doesn't exist*/
Kareem
la source
10
if ( $( "#myDiv" ).length ) {
    //id id ( "#myDiv" ) is exist this will perform
    $( "#myDiv" ).show();

}

Un autre raccourci:

    $( "#myDiv" ).length && $( "#myDiv" ).show();
Sanjib Debnath
la source
C'est juste un exemple à l'intérieur de la fonction if que tout peut écrire, lorsque l'id ("#myDiv") est présent et qu'il fonctionnera.
Sanjib Debnath
5

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

if($('#divId').length!==0){
      Your Code Here
}
Hariprasath
la source
1
if ($ ('# divId'). length! = 0) {Votre code ici} ce serait correct
Santosh
3

Voici la fonction jQuery que j'utilise:

function isExists(var elemId){
    return jQuery('#'+elemId).length > 0;
}

Cela renverra une valeur booléenne. Si l'élément existe, il renvoie vrai. Si vous souhaitez sélectionner l'élément par nom de classe, remplacez simplement #par.

Sahan
la source
2

Vous pouvez le gérer de différentes manières,

L'objectif est de vérifier si le div existe puis d'exécuter le code. Facile.

État:

$('#myDiv').length

Remarque:

#myDiv -> < div id='myDiv' > <br>
.myDiv -> < div class='myDiv' > 

Cela renverra un nombre chaque fois qu'il est exécuté, donc s'il n'y a pas de div, il donnera un zéro [0], et comme nous, aucun 0 peut être représenté comme faux en binaire, vous pouvez donc l'utiliser dans l'instruction if. Et vous pouvez l'utiliser comme comparaison avec un nombre nul. tandis que tout il y a trois déclarations ci-dessous

// Statement 0
// jQuery/Ajax has replace [ document.getElementById with $ sign ] and etc
// if you don't want to use jQuery/ajax 

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

// Statement 1
   if ($('#'+ name).length){ // if 0 then false ; if not 0 then true
       $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
    }

// Statement 2
    if(!$('#'+ name).length){ // ! Means Not. So if it 0 not then [0 not is 1]
           $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>"); 
    }
// Statement 3
    if ($('#'+ name).length > 0 ) {
      $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
    }

// Statement 4
    if ($('#'+ name).length !== 0 ) { // length not equal to 0 which mean exist.
       $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
    }
Ad Kahn
la source
1

mettez l'id que vous voulez vérifier dans jquery is method.

var idcheck = $("selector").is("#id"); 

if(idcheck){ // if the selector contains particular id

// your code if particular Id is there

}
else{
// your code if particular Id is NOT there
}
bhavya_w
la source