2012-06-21 16 views
7
<div id="cardSlots"> 
<div class="ui-droppable" tabindex="-1" id="card1">one</div> 
<div class="ui-droppable" tabindex="-1" id="card2">two</div> 
<div class="ui-droppable" tabindex="-1">three</div> 
<div class="ui-droppable" tabindex="-1">four</div> 
</div> 

<script> 
    $(".ui-droppable").each(function() {  
     if($(this).attr("id").length>0) 
     { 
     alert('here'); 
     } 
    }); 
</script> 

Próbuję przechodzić przez klasę, ale problem jest taki, że mam duplikat card1 i card2 ids na tej stronie. ale powyższy kod wydaje się działać, ale pokazuje poniżej błąd.jak sprawdzić, czy div ma id, czy nie?

Uncaught Type Error: Cannot read property 'length' of undefined 

Próbuję uzyskać identyfikatory z pętli, które tam są.

+0

Mam nadzieję, że nie Brzmi nieuprzejmie, ale myślę, że powinieneś nauczyć się mor e o JavaScript, zanim przejdziesz do jQuery – vol7ron

+0

jQuery to dziwny paradoks.Został stworzony, aby ułatwić programowanie JavaScript, co czyni go doskonałym dla początkujących; jednak nadal jest to JS, więc użytkownik powinien najpierw zapoznać się z co najmniej natywnymi interakcjami z obiektami JavaScript (właściwości/wywołania metod) – vol7ron

Odpowiedz

13

selektor Zastosowanie atrybutselector[attribute] dostać tylko te elementy, które mają identyfikator

$('.myClass[id]') // Get .myClass elements that have ID attribute 

W twoim przypadku:

$('.ui-droppable[id]').each(function(){ 
    alert(this.id); 
}); 

jsFiddle demo

+2

To jest również dobra odpowiedź, która dostaje się na pytanie, którego szukałeś, ale niekoniecznie pytając: – vol7ron

2

Jeśli nie ma atrybutu , metoda zwróci undefined. Wystarczy napisać:

if($(this).attr("id")) 
-2
var $this = $(this); 
if (typeof $this.attr("id") != "undefined" && $this.attr("id").length > 0) { 
    ... 
} 

Jeśli masz zamiar użyć $(this) więcej niż raz, to powinni go znaleźć raz, i umieścić obiekt wynikowy jQuery w zmiennej lokalnej.

12

if(this.id) jest wszystko, czego potrzebujemy.


Dlaczego to działa?

Jeśli element ma identyfikator, wartość będzie niepustym łańcuchem, który zawsze jest oceniany jako true.
Jeśli nie ma identyfikatora, wartość jest pustym łańcuchem, którego wartość wynosi false.


Próbuję uzyskać identyfikatory z pętli, które są tam.

Aby uzyskać listę identyfikatorów, można użyć .map tak:

var ids = $(".ui-droppable").map(function() {  
    return this.id ? this.id : null; 
}).get(); 

lub użyj wybieraka Roko suggests in his answer.

+0

+1 dla najlepszej odpowiedzi – vol7ron

+0

opisową alternatywą: 'if (this.id && this.id.length > $ somenum) ' – vol7ron

1
if(typeof $(this).attr("id") != 'undefined') 
+1

Co jeśli' id = "" '? –

Powiązane problemy