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"))
})

请注意,您当前的 html 标记是无效的,因为您不应该为id多个元素提供相同的标记。(因此,鉴于您应该更改标记以解决将类添加到顶级 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 是唯一的(或者应该是唯一的,尽管不是所有的都是......)并且“男人”和“女人”元素必须是不相交的,所以一个元素只能是其中一个或另一个的子元素 - 因为此选择器将绑定到两者之一中的链接,您知道如果其父级不是“男人”,则它必须是“女人”。

于 2012-06-21T07:10:49.453 回答