2009-08-21 15 views
7

は、次のHTMLと仮定します。私の目標は、クリックされるリチウムを隠すことができるようにすることですjqueryを使用して親要素を非表示にするにはどうすればよいですか?

function foo(anchor) { 
    alert($(anchor).attr('href')); 
} 

、私:

<li class="fooli"> 
    <a class="foo" href="javascript:foo(this);">anchor</a> 
</li> 
<li class="fooli"> 
    <a class="foo" href="javascript:foo(this);">anchor</a> 
</li> 

と次のJavaScript(jQueryの1.3.2を使用)ユニークなIDを割り当てることはできません。したがって、私は$(anchor).parent()。hide()のようなものによって、位置的に(つまり、クリックされた特定のアンカーを識別する)必要があります。

しかし、上記のアラートは「未定義」を返すので、私には正しいjqueryオブジェクトがあることもわかりません。

オブジェクト$(アンカー)がどのようなオブジェクトであるかをどのように把握するのですか?特に、どのような属性を持っているのか、どのクラスを持っているのか、どのようなHTML要素なのかなどを確認するにはどうすればよいですか?

答えて

16

あなたがこれを行うことはできません。

$(function() { 
    $("a.foo").click(function() { 
    $(this).parent().hide(); 
    return false; 
    }); 
}); 

で:jQueryので

<li class="fooli"><a class="foo" href="#">anchor</a></li> 
<li class="fooli"><a class="foo" href="#">anchor</a></li> 
+0

なぜそうすることができますか?良いアイデア! – dfrankow

7

$(...)は、単一のHTML要素になることはありません。それは常にそれらのリストです。

あなたは.each()を使用し、定期的なJavascriptのリストに変換したり、より良いし.get()を使用することができます。

$(anchor).each(function() { alert(this) }); 

これはあなたに[object HTMLAElement]のようなものを提供します。完全に調べるにはfor/inを使用する必要がありますが、あなたがどこにいるか把握するには、おそらく.tagName.innerHTMLで十分でしょう。

また、$(...).css('outline', '1px solid lime')を使用して要素を検索することもできます。見逃しにくく、Firebugで簡単に特定できます。

補足:あなたのHTMLからJavascriptを分離する上記の答えに間違いなく同意します。 JSをインライン化しないでください。

+0

私が尋ねた質問にお返事いただきありがとうございます。 – dfrankow

関連する問題