2013-05-23 20 views
8

http://jsfiddle.net/3Bvt9/3/jQuery .closest() DOM ağacı aramak alamayan

HTML

<div id="div1"> 
    <img class="size" src=""> 
    <input name="rdo" id="rdo" type="radio" value="1"> 
    <div id="div2"> 
     <label>radiobutton</label> 
     <div id="div3"> 
      <a href="javascript:void(0)">link</a> 
      <input name="abc" id="abc" type="hidden" value="1"> 
     </div> 
    </div> 
</div> 

jquery

$('#abc').parent().parent().parent().find("input[type='radio']").length; //1 
$('#abc').closest("input[type='radio']").length; //0 why? 

neden görünmüyor yakın sorgu çalışır? En yakın() 'nın DOM ağacındaki atalarından geçtiğini düşündüm.

+7

_I yakın, ama bir giriş, bir ana öğe olamaz:

Bu aynı zamanda çalışacak. – undefined

+0

Dokümantasyonda "Setteki her eleman için, elementin kendisini test ederek ve DOM ağacındaki ataları boyunca ilerleyerek seçici ile eşleşen ilk elemanı alın." Seçici ilk bulunan radyo girişiyle eşleşmez mi? Geçerli ebeveynler hangileri? .closest() sadece bu türleri bulabilir mi? – duyn9uyen

+1

Yakın oy btw ile ne var ne yok? Açık bir cevapla "neden çalışmıyor" gerçek bir soru. –

cevap

13

Bunun nedeni, input[type="radio"]'un #abc ebeveyni değil, büyükbaba öğesinin bir kardeşi olmasıdır. Ayrıca

, according to w3c, <input> unsurları, alt öğelere sahip olamaz <button> aksine, yani etrafında #abc "sarmak" vermez.

İlk yöntem işe yaramıyor çünkü $('#abc').parent().parent().parent() üst <div>; .find("input[type='radio']") üzerinde, radyo butonunu çocuk elemanı olarak bulabilirsiniz. DOM tree._ Evet onun atalarından aracılığıyla yukarı geçtiği) (

$('#abc').parent().parent().siblings('input[type="radio"]).length; // 1 
+0

Yalnızca #abc kimliğindeydim, DOM'a giden en yakın radyo düğmesini bulmak için hangi yöntemi kullanabilirim? Birkaç .parent() yöntemini kullanmanın daha iyi bir yolu var mı? – duyn9uyen

+0

@ duyn9uyen Büyükannem elementini sanırım bir sınıf adı verebilirsin, ama her zaman biraz tuhaf "büyükbabaların kardeşini bul" kodu olacak. –

+0

Will .closest() yalnızca doğrudan ebeveynleri bulur mu? Yani bu durumda, sadece üç div bulacaktır? – duyn9uyen

İlgili konular