Jak sprawdzić, czy div o określonym identyfikatorze istnieje w jQuery?

266

Mam funkcję, która dodaje <div>element do kliknięcia. Funkcja pobiera tekst klikniętego elementu i przypisuje go do zmiennej o nazwie name. Ta zmienna jest następnie używana jako<div> id dołączony element.

Muszę zobaczyć, czy <div> idzname już istnieje, zanim dołączy element, ale nie wiem jak znaleźć tego.

Oto mój kod:

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

Wydaje się to dość proste, ale pojawia się błąd „ Nieoczekiwany koniec pliku podczas wyszukiwania nazwy klasy” . Nie mam pojęcia, co to znaczy.

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

Co więcej, chcę, aby móc usunąć ten element, jeśli go zamknę, co powinno następnie usunąć div id [name]dokument, ale.remove() tego nie robi.

Oto kod do tego:

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

Dodałem .mini-closedo funkcji append jako dziecko, .labelswięc był sposób na zamknięcie dołączonej w <div>razie potrzeby. Po kliknięciu .mini-closei ponownym kliknięciu tej samej nazwy li.friendsnadal znajduje się div id [name]i zwraca pierwszą część mojego ifwyciągu.

sadmicrowave
źródło
Nieoczekiwany koniec pliku zwykle sprowadza się gdzieś do błędu składniowego. $("div#" + name).css({bottom: '30px'});jest źle, powinno być$("div#" + name).css('bottom', '30px');
Jay Irvine,
Remove () odłącza element od drzewa DOM, ale go nie niszczy, więc wyszukiwanie według identyfikatora nadal go znajdzie, jeśli przypisałeś go do zmiennej, nadal by tam był, itp. Rozwiązaniem jest, jeśli znajdź go, dodaj go do poprawnego diva (jeśli już tam nic się nie stanie, jeśli zostanie odłączony / usunięty, pojawi się ponownie), jeśli nie zostanie znaleziony, a następnie utwórz go.
Jay Irvine,

Odpowiedzi:

539

Możesz użyć .lengthpo selektorze, aby sprawdzić, czy pasuje on do jakichkolwiek elementów, takich jak to:

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

Pełna wersja:

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

Lub wersja nie-jQuery dla tej części (ponieważ jest to identyfikator):

$("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
źródło
98
dużo jQuery w części nie-jQuery: p
jAndy
@Nick - to nie działa dla mnie. Podczas rozwiązywania problemów powiadomiłem o długości identyfikatora div [nazwa], ale nigdy go nie znajduje.
sadmicrowave
8
sprawdzanie == 0 nie jest konieczne, jeśli ($ („#” + nazwa) .length) {} działa dobrze.
ScottE
3
@ScottE - To odwrotność, masz na myśli !$("#"+name).length):)
Nick Craver
1
Myślę, że powinieneś to zrobić ===zamiast piły ==.
niebezpieczne89
66

Odpowiedź Nicka to wbija. Możesz również użyć wartości zwracanej getElementById bezpośrednio jako warunku, zamiast porównywać ją z wartością null (tak czy inaczej działa, ale osobiście uważam ten styl za bardziej czytelny):

if (document.getElementById(name)) {
  alert('this record already exists');
} else {
  // do stuff
}
philo
źródło
masz rację, to działa świetnie (musiałem robić coś głupiego). Jednak gdy zamieniam alert () na coś innego, pojawia się błąd: „nieoczekiwany koniec pliku podczas wyszukiwania nazwy klasy”. dlaczego to się dzieje? Zobacz moje OP za to, co zamieniam funkcję alert () na ...
sadmicrowave
jakieś dodatkowe pomysły od kogoś?
sadmicrowave
2
Błąd brzmi, jakbyś pomijał nawias klamrowy lub średnik.
Rikki
@Philo Co zrobić, jeśli chcesz dopasować konkretny identyfikator przechowywany w tablicy do
Beaniie
Masz kilka identyfikatorów w tablicy i chcesz znaleźć każdy z nich? Metoda brutalnej siły polegałaby na zapętleniu tablicy i wywołaniu getElementById dla każdego z nich.
philo
31

Spróbuj sprawdzić długość selektora, jeśli coś ci zwróci, element musi istnieć, inaczej nie.

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
}

Użyj pierwszego warunku if dla id, a drugiego dla klasy.

Tapan Kumar
źródło
21
if($("#id").length) /*exists*/

if(!$("#id").length) /*doesn't exist*/
Kareem
źródło
10
if ( $( "#myDiv" ).length ) {
    //id id ( "#myDiv" ) is exist this will perform
    $( "#myDiv" ).show();

}

Innym skrótowym sposobem:

    $( "#myDiv" ).length && $( "#myDiv" ).show();
Sanjib Debnath
źródło
Jest to tylko przykład wewnątrz funkcji if, którą cokolwiek może napisać, gdy obecny jest identyfikator („#myDiv”), który się wykona.
Sanjib Debnath,
5

Możesz to sprawdzić za pomocą jquery:

if($('#divId').length!==0){
      Your Code Here
}
Hariprasath
źródło
1
if ($ ('# divId'). length! = 0) {Twój kod tutaj} to byłoby poprawne
Santosh
3

Oto funkcja jQuery, której używam:

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

Zwróci to wartość logiczną. Jeśli element istnieje, zwraca wartość true. Jeśli chcesz, aby wybrać element, przez nazwę klasy, po prostu zastąpić #z.

Sahan
źródło
2

Możesz sobie z tym poradzić na różne sposoby,

Celem jest sprawdzenie, czy div istnieje, a następnie wykonanie kodu. Prosty.

Stan: schorzenie:

$('#myDiv').length

Uwaga:

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

Zwróci liczbę za każdym razem, gdy jest wykonywana, więc jeśli nie ma div, da Zero [0], a ponieważ nie mamy 0 może być reprezentowane jako fałsz w pliku binarnym, więc możesz użyć go w instrukcji if. I możesz użyć go jako porównania z liczbą zerową. podczas gdy istnieją trzy podane poniżej oświadczenia

// 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
źródło
1

wstaw identyfikator, który chcesz sprawdzić w 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
źródło