0

私のメインファイルは

<div id="man">
//some content
<div id="one">
//some content
<div id="two">
//some content
<div id="three">
//some content
<div id="four">
<a title="to delete">delete</a>
<a title="to reset">reset</a>
<a title="to change">change</a>
</div>...// all div ends...


<div id="woman">
//some content
<div id="one">
//some content
<div id="two">
//some content
<div id="three">
//some content
<div id="four">
<a title="to delete">delete</a>
<a title="to reset">reset</a>
<a title="to change">change</a>
</div>...// all div ends...

そしてjqueryは-

$("document").ready(function(){
$("a:contains(delete)").click(function(){
alert($(this).parent().parent().parent().parent().parent().attr("id"))
})
})

これを使用する代わりに、最上位の親を見つける別の方法はありますか... ??

4

2 に答える 2

2

HTMLを少し変更して、それらのトップレベルのdivに共通のクラスを与えることができる場合:

<div id="man" class="top">
...
<div id="woman" class="top">

...次に、.closest()メソッドを使用してそれらを選択できます。

$("a:contains(delete)").click(function(){
   alert($(this).closest('div.top').attr("id"))
})

id複数の要素に同じものを与えることは想定されていないため、現在のhtmlマークアップは無効であることに注意してください。(したがって、マークアップを変更して、最上位のdivにクラスを追加しても問題がないことを修正する必要があることを前提としています。)

編集:「男性」と「女性」がトップレベルにない場合でも上記が機能することのデモンストレーション:http://jsfiddle.net/NVQXq/

于 2012-06-21T06:57:40.303 に答える
1

そのhtml構造に固執する必要がある場合(クラスを追加できないなど)は、セレクターで構造を確実に利用できます。

$(document).ready(function(){
    $("a:contains(delete)").click(function(){
        var pId = $(this).parents("#man").attr("id") ||
            $(this).parents("#woman").attr("id");
        alert(pId);
    });
});

これは、HTMLが整形式である(つまり、manのdivがすべて閉じている)ことも前提としています。

IDは一意であり(または、すべてが一意であるとは限りませんが...)、「男性」要素と「女性」要素は互いに素である必要があるため、要素はどちらか一方の子にしかなれません。このセレクターは、2つのうちのいずれかのリンクにバインドされます。親が「男性」でない場合は、「女性」である必要があります。

于 2012-06-21T07:10:49.453 に答える