2013-03-03 12 views
10

Perché jQuery restituisce lo stesso elemento due volte qui?La selezione per elemento ID + classe elemento produce lo stesso elemento due volte

Controllato l'HTML numerose volte, c'è solo uno <div> con id="3" e class="password_field_real".

questo è il risultato per ottenere tutti gli elementi con class="password_field_real":

> $(".password_field_real") 

[ 
    <div class="password_field_real" id="2" style="display: none;"></div>, 
    <div class="password_field_real" id="3" style="display: none;"></div>, 
    <div class="password_field_real" id="7" style="display: none;"></div>, 
] 

Tuttavia, quando cerco di class="password_field_real" e id="3", ottengo una lista di due div, che sono la stessa cosa!

> $("#3.password_field_real") 

[ 
    <div class="password_field_real" id="3" style="display: none;"></div>, 
    <div class="password_field_real" id="3" style="display: none;"></div> 
] 

Questo non è il caso di altri due div:

> $("#7.password_field_real") 

[ 
    <div class="password_field_real" id="7" style="display: none;"></div> 
] 

Perché è potuto succedere?

* UPDATE *

Reproduced questo jsFiddle

* UPDATE # 2 *

Se si utilizzano ID non numerici di tutto works just fine.

+2

Quale versione di jQuery stai usando? Riesci a trovare un jsFiddle o simile che mostri questo problema? Non riesco a riprodurlo con jQuery 1.9.1 (http://jsfiddle.net/B7S2f/). – Matt

+0

sai che gli ID numerici sono legali solo in HTML5? – Alnitak

+0

Penso che non ci dovrebbero essere problemi, se si sta affrontando il problema, prima di tutto svuotare 'cache e cookies', quindi ricontrollare. –

risposta

9

Prima di tutto, un id deve essere unico in una pagina . Questa è l'idea alla base.

Il tuo problema è che si utilizza un selettore ID non valido (secondo HTML4):

  1. ID e NAME devono iniziare con una lettera ([A-Za-z]) e può essere seguito da un numero qualsiasi di lettere, cifre ([0-9]), trattini ("-"), caratteri di sottolineatura ("_"), due punti (":") e punti (".").

In altre doctype ci sono diverse restrizioni, ma è sempre necessario almeno una lettera. Dato che usi solo un numero, non è valido. Questa potrebbe essere la spiegazione quando si usano gli ID non numerici. Ancora è un comportamento un po 'strano di jQuery.

Prevenire il tuo ID con almeno una lettera [A-Za-z] o, meglio ancora, renderlo descrittivo.

7

MAI usare il tempo più lo stesso ID, id deve essere unico

alert($("#3").length); // will just return 1 not 8 

questo codice veramente stupido sufficiente selezionare la tua buona, ma non usare mai che, causerà fine del mondo

alert($("#3").find("#3").filter(".password_field_real").attr("class")); 

se hai bisogno dell'ID corrente per ogni sub "div" e "a", prova dati- con perché non un codice come quello

$(".password_entry").each(function(){ 
    var $t = $(this); 
    var currentId = $t.attr("id"); 
    $t.find("div,a").data("id",currentId); 
}); 

no w è possibile estrarre id corrente da tutti i sub "div" e "a" con .data ("id")

per exemple:

$(".password_field_mask").click(function(){ alert($(this).data("id")); }); 
Problemi correlati