2013-03-03 9 views
10

jQuery neden aynı öğeyi iki kez döndürüyor?Öğe tarafından seçme ID + öğesi sınıfı aynı öğeyi iki kez döndürür

HTML'yi birçok kez kontrol ettiyseniz, id="3" ve class="password_field_real" ile yalnızca bir var. Ben class="password_field_real" ve id="3" almaya çalıştığınızda

> $(".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>, 
] 

Ancak, ben aynı olan iki div, bir listesini almak:

Bu class="password_field_real" ile tüm öğeleri almak için sonucudur!

> $("#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> 
] 

Bu, diğer iki divs durum böyle değildir:

> $("#7.password_field_real") 

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

Bu neden olabilir?

* GÜNCELLEME * jsFiddle

yılında

Reproduced bu

* GÜNCELLEME 2. sayısal olmayan kimlikleri kullanılırsa *

, her şey works just fine.

+2

Hangi jQuery sürümünü kullanıyorsunuz? Bu sorunu gösteren bir jsFiddle veya benzeri ile gelir misiniz? Bunu jQuery 1.9.1 ile yeniden oluşturamıyorum (http://jsfiddle.net/B7S2f/). – Matt

+0

sayısal kimliklerin HTML5'te yasal olduğunu biliyor musunuz? – Alnitak

+0

Sanırım problemle karşılaşırsanız sorun çıkmamalı, önce önbelleği ve çerezleri temizleyin, sonra tekrar kontrol edin. –

cevap

9

First, bir id bir sayfada benzersiz olmalıdır . Arkasındaki fikir budur.

Kişisel sorun (HTML4 göre) geçersiz Kimlik seçici oldukları:

  1. İD NAME ve jeton bir harf ile başlamalıdır ([A-Za-z]) ve olabilir herhangi bir sayıdaki harf, (0- 0-), kısa çizgi ("-"), alt çizgi ("_"), iki nokta üst üste (":") ve nokta (".") takip eder. Diğer DOCTYPE belge ise

farklı kısıtlamalar vardır, ama her zaman en az bir harf gerekir. Sadece bir sayı kullandığınız için geçersiz. Sayısal olmayan kimliğin her türünü kullandığınızda bu açıklama olabilir. Yine de jQuery'nin biraz garip davranışı.

Kimliklerinizi en az bir harfle ([A-Za-z]) veya daha da iyi tanımlayarak açıklayıcı yapın.

7

aynı id, kimlik

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

bu gerçekten aptal kod sadece iyi birini seçmek EŞSİZ olabilir, ama asla kullanmak, dünyanın sonunu neden olacaktır GEREKİR çoklu zaman kullanmak ASLA

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

her alt "div" ve "a" için geçerli kimliği gerekiyorsa, ile veriye deneyin yüzden

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

NO gibi bir kod Eğer tüm alt "div" ve "" .data ile ("id") Exemple tarafından

güncel id çıkarabilir w: Herşeyden

$(".password_field_mask").click(function(){ alert($(this).data("id")); }); 
İlgili konular