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.