2013-05-23 5 views
8

http://jsfiddle.net/3Bvt9/3/jQueryのは

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? 

がなぜ最も近い問合せ作業にはないDOMツリーを検索する)(.closest取得することはできませんか?私はclosest()がDOMツリーの先祖を通過すると考えました。

+7

_Iが最も近いと思ったが、入力は、親要素にすることはできません。

これも動作します。 – undefined

+0

ドキュメントには、「セット内の各要素に対して、要素自体をテストし、DOMツリー内の祖先を走査することによって、セレクタに一致する最初の要素を取得します」と記載されています。セレクタが最初に見つかったラジオ入力と一致しませんか?正当な親はどれですか? .closest()はそれらの型だけを見つけることができますか? – duyn9uyen

+1

最近の投票はどうなっていますか?明白な答えで、なぜ「うまくいかない」というのは本当の疑問です。 –

答えて

13

これは、input[type="radio"]#abcの親ではなく、祖父母要素の兄弟であるためです。

また、<button>とは異なり、according to w3c<input>の要素は子要素を持つことができません。すなわち、#abcを「囲む」ことはありません。

$('#abc').parent().parent().parent()が先頭にある<div>を指しているので、最初の方法が機能します。 .find("input[type='radio']")をオンにするとラジオボタンがその子要素として検出されます。 DOM tree._はいでその先祖を通って上に横断)(

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

私は#abcのIDしか持っていなかった場合、どのような方法で最も近いラジオボタンがDOMを上っているのかを見つけることができますか?いくつかの.parent()メソッドを使うよりも良い方法がありますか? – duyn9uyen

+0

@ duyn9uyenあなたは祖父母要素に私が推測するクラス名を与えることができますが、やや厄介な "祖父の兄弟を見つける"コードが常に存在します。 –

+0

.closest()は直接親だけを見つけるでしょうか?したがって、この場合、3つのdivのみが検索されます。 – duyn9uyen