Wie finde ich heraus, ob div mit einer bestimmten ID in jQuery vorhanden ist?

266

Ich habe eine Funktion, die beim Klicken ein <div>an ein Element anfügt . Die Funktion ruft den Text des angeklickten Elements ab und weist ihn einer Variablen mit dem Namen zu name. Diese Variable wird dann als <div> iddas angehängte Element verwendet.

Ich muss sehen, ob bereits ein <div> idwith namevorhanden ist, bevor ich das Element anhänge, aber ich weiß nicht, wie ich das finden soll.

Hier ist mein 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');
});

Dies scheint ziemlich einfach zu sein, aber ich erhalte die Fehlermeldung " Unerwartetes Dateiende bei der Suche nach dem Klassennamen" . Ich habe keine Ahnung, was das bedeutet.

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>");
}

Außerdem möchte ich dieses Element löschen können, wenn ich es schließe, wodurch das Element div id [name]aus dem Dokument entfernt werden soll, dies .remove()jedoch nicht.

Hier ist der Code dafür:

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

Ich .mini-closehabe die Append-Funktion als Kind von hinzugefügt , .labelssodass es eine Möglichkeit gab, die angehängte Funktion <div>bei Bedarf zu schließen. Nach dem Klicken .mini-closeund dem erneuten Klicken auf denselben Namen wird immer li.friendsnoch der gefunden div id [name]und der erste Teil meiner ifAnweisung zurückgegeben.

sadmicrowave
quelle
Das unerwartete Dateiende führt normalerweise irgendwo zu einem Syntaxfehler. $("div#" + name).css({bottom: '30px'});ist falsch, sollte es sein$("div#" + name).css('bottom', '30px');
Jay Irvine
Remove () entfernt das Element aus dem DOM-Baum, zerstört es jedoch nicht, sodass es bei einer Suche nach ID weiterhin gefunden wird. Wenn Sie es einer Variablen zugewiesen haben, ist es weiterhin vorhanden usw. Die Lösung hier ist, wenn Sie Finden Sie es, hängen Sie es an das richtige Div an (wenn es bereits vorhanden ist, passiert nichts, wenn es entfernt / entfernt wurde, wird es wieder angezeigt). Wenn es nicht gefunden wird, erstellen Sie es.
Jay Irvine

Antworten:

538

Sie können .lengthnach der Auswahl verwenden, um festzustellen, ob sie mit Elementen wie den folgenden übereinstimmt:

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

Die Vollversion:

$("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');
  }
});

Oder die Nicht-jQuery-Version für diesen Teil (da es sich um eine ID handelt):

$("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
quelle
98
viele jQuery im Nicht-jQuery-Teil: p
jAndy
@ Nick - das funktioniert bei mir nicht. Während der Fehlerbehebung habe ich die Länge der Div-ID von [Name] alarmiert, aber sie wird nie gefunden.
Sadmicrowave
8
Das Überprüfen von == 0 ist nicht erforderlich, wenn ($ ("#" + Name) .length) {} einwandfrei funktioniert.
ScottE
3
@ScottE - Das ist das Gegenteil, du meinst !$("#"+name).length):)
Nick Craver
1
Ich denke, Sie sollten tun, ===anstatt zu sehen ==.
Gefahr89
66

Nicks Antwort trifft es. Sie können den Rückgabewert von getElementById auch direkt als Bedingung verwenden, anstatt ihn mit null zu vergleichen (so oder so funktioniert es, aber ich persönlich finde diesen Stil etwas lesbarer):

if (document.getElementById(name)) {
  alert('this record already exists');
} else {
  // do stuff
}
Philo
quelle
Sie haben Recht, das funktioniert großartig (ich muss etwas Dummes getan haben). Wenn ich jedoch die Warnung () durch etwas anderes ersetze, wird die Fehlermeldung "Unerwartetes Dateiende bei der Suche nach dem Klassennamen" angezeigt. Warum passiert dies? Sehen Sie in meinem OP nach, was ich meine alert () -Funktion durch ...
ersetze
Irgendwelche zusätzlichen Ideen von irgendjemandem?
Sadmicrowave
2
Der Fehler klingt so, als ob Ihnen eine Klammer oder ein Semikolon fehlt.
Rikki
@Philo Was ist, wenn Sie nach bestimmten IDs suchen, die in einem Array enthalten sind
Beaniie
Sie haben mehrere IDs in einem Array und möchten jede finden? Der Brute-Force-Ansatz besteht darin, das Array zu durchlaufen und für jedes von ihnen getElementById aufzurufen.
Philo
31

Versuchen Sie, die Länge des Selektors zu überprüfen. Wenn er Ihnen etwas zurückgibt, muss das Element vorhanden sein, sonst nicht.

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
}

Verwenden Sie die erste if-Bedingung für id und die zweite für class.

Tapan Kumar
quelle
21
if($("#id").length) /*exists*/

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

}

Eine andere Abkürzung:

    $( "#myDiv" ).length && $( "#myDiv" ).show();
Sanjib Debnath
quelle
Es ist nur ein Beispiel innerhalb der if-Funktion, die alles schreiben kann, wenn die ID ("#myDiv") vorhanden ist, die ausgeführt wird.
Sanjib Debnath
5

Sie können dies mit jquery einfach folgendermaßen überprüfen:

if($('#divId').length!==0){
      Your Code Here
}
Hariprasath
quelle
1
if ($ ('# divId'). length! = 0) {Dein Code hier} das wäre richtig
Santosh
3

Hier ist die von mir verwendete jQuery-Funktion:

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

Dies gibt einen booleschen Wert zurück. Wenn ein Element vorhanden ist, wird true zurückgegeben. Wenn Sie mit dem Klassennamen auswählen Element möchten, ersetzen Sie einfach #mit.

Sahan
quelle
2

Sie können auf verschiedene Arten damit umgehen,

Ziel ist es zu überprüfen, ob das div existiert, und dann den Code auszuführen. Einfach.

Bedingung:

$('#myDiv').length

Hinweis:

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

Dies gibt jedes Mal eine Zahl zurück, wenn es ausgeführt wird. Wenn es kein div gibt, gibt es eine Null [0], und da keine 0 in binär als falsch dargestellt werden kann, können Sie sie in der if-Anweisung verwenden. Und Sie können es als Vergleich mit einer Zahl ohne Zahl verwenden. während jeder gibt es drei Aussagen unten gegeben

// 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
quelle
1

Geben Sie die ID, die Sie einchecken möchten, in die Methode jquery is ein.

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
quelle