Come scoprire se in jQuery esiste un div con ID specifico?


266

Ho una funzione che aggiunge <div>un elemento a un clic. La funzione ottiene il testo dell'elemento cliccato e lo assegna a una variabile chiamata name. Tale variabile viene quindi utilizzata come <div> idelemento aggiunto.

Devo vedere se esiste già un <div> idcon nameprima di aggiungere l'elemento ma non so come trovarlo.

Ecco il mio codice:

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

Sembra abbastanza semplice ma sto ricevendo l'errore " Fine del file imprevista durante la ricerca del nome della classe" . Non ho idea di cosa significhi.

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

Inoltre, desidero poter eliminare questo elemento se lo chiudo, il che dovrebbe quindi rimuoverlo div id [name]dal documento ma .remove()non farlo.

Ecco il codice per questo:

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

Ho aggiunto .mini-closealla funzione append come figlio di .labelsquindi c'era un modo per chiudere l'aggiunta <div>se necessario. Dopo aver fatto clic .mini-closee tentato di fare di nuovo clic sullo stesso nome da li.friendsesso, trova ancora div id [name]e restituisce la prima parte della mia ifdichiarazione.


La fine imprevista del file di solito si riduce a un errore di sintassi da qualche parte. $("div#" + name).css({bottom: '30px'});è sbagliato, dovrebbe essere$("div#" + name).css('bottom', '30px');
Jay Irvine

Remove () stacca l'elemento dall'albero DOM ma non lo distrugge, quindi una ricerca per ID lo troverà comunque, se lo avessi assegnato a una variabile sarebbe ancora lì, ecc. La soluzione qui è se tu trovalo, aggiungilo al div corretto (se è già lì non succederà nulla, se è stato staccato / rimosso riapparirà), se non viene trovato, quindi crealo.
Jay Irvine,

Risposte:


540

Puoi usare .lengthdopo il selettore per vedere se ha trovato degli elementi, come questo:

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

La versione completa:

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

Oppure, la versione non jQuery per questa parte (poiché è 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');
  }
});

98
un sacco di jQuery nella parte non jQuery: p
jAndy

@Nick - questo non funziona per me. Durante la risoluzione dei problemi ho avvisato la lunghezza del div id di [nome] ma non lo trova mai.
sadmic Microwave,

8
il controllo == 0 non è necessario se ($ ("#" + nome) .length) {} funziona bene.
ScottE,

3
@ScottE - Questo è il contrario, vuoi dire !$("#"+name).length):)
Nick Craver

1
Penso che dovresti fare ===invece di vedere ==.
danger89,

66

La risposta di Nick lo inchioda. Puoi anche utilizzare il valore restituito da getElementById direttamente come condizione, anziché confrontarlo con null (in entrambi i casi funziona, ma trovo personalmente questo stile un po 'più leggibile):

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

hai ragione, funziona benissimo (devo aver fatto qualcosa di stupido). Tuttavia, quando sostituisco alert () con qualcos'altro, viene visualizzato un messaggio di errore: "fine imprevista del file durante la ricerca del nome della classe". perché sta succedendo? Vedi il mio OP per quello che sto sostituendo la mia funzione alert () con ...
sadmic Microwave

qualche idea aggiuntiva da parte di qualcuno?
sadmic Microwave

2
L'errore sembra che ti manchi una parentesi o un punto e virgola.
Rikki,

@Philo Cosa succede se stai cercando di abbinare ID specifici contenuti in un array a
Beaniie il

Hai diversi ID in un array e vuoi trovarli ciascuno? L'approccio della forza bruta sarebbe quello di eseguire il loop sull'array e chiamare getElementById per ciascuno di essi.
philo,

31

Prova a controllare la lunghezza del selettore, se ti restituisce qualcosa, l'elemento deve esistere altrimenti.

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
}

Usa la prima condizione if per id e la seconda per classe.


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

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

10
if ( $( "#myDiv" ).length ) {
    //id id ( "#myDiv" ) is exist this will perform
    $( "#myDiv" ).show();

}

Un altro modo abbreviato:

    $( "#myDiv" ).length && $( "#myDiv" ).show();

È solo un esempio all'interno della funzione if che qualsiasi cosa può scrivere, quando è presente l'id ("#myDiv") che eseguirà.
Sanjib Debnath,

5

Puoi controllare usando jquery semplicemente in questo modo:

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

1
if ($ ('# divId'). length! = 0) {Il tuo codice qui} questo sarebbe corretto
Santosh,


3

Ecco la funzione jQuery che uso:

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

Ciò restituirà un valore booleano. Se l'elemento esiste, restituisce true. Se si desidera selezionare l'elemento in base al nome della classe, è sufficiente sostituirlo #con.


2

Puoi gestirlo in diversi modi,

L'obiettivo è verificare l'esistenza del div, quindi eseguire il codice. Semplice.

Condizione:

$('#myDiv').length

Nota:

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

Questo restituirà un numero ogni volta che viene eseguito, quindi se non ci sono div darà uno Zero [0], e dato che nessuno 0 può essere rappresentato come falso in binario in modo da poterlo usare in if. E puoi usarlo come confronto con un numero nessuno. mentre qualsiasi ci sono tre dichiarazioni fornite di seguito

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

1

metti l'id che vuoi controllare in 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
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.