jQuery获取*精确*父id

jQuery获取*精确*父id,jquery,parent,Jquery,Parent,我通常会使用$('ChildID').parent().attr('id'),但这只会得到具有该id的第一个div <div id="FOO1"> <div id="bar"></div> <div id="bar"></div> <div id="bar"></div> </div> <div id="FOO2"> <div id="bar" onC

我通常会使用$('ChildID').parent().attr('id'),但这只会得到具有该id的第一个div

<div id="FOO1">
    <div id="bar"></div>
    <div id="bar"></div>
    <div id="bar"></div>
</div>
<div id="FOO2">
    <div id="bar" onClick="alert($(this).parent().attr('id'));"></div>
</div>


这会提醒FOO1,但我需要它做的是提醒实际的父级,而不是第一个div的父级使用这样的id。

它正确地给了我FOO2


同一id的元素不应超过一个。。。另外,如果您使用jquery,为什么要使用内联javascript

html

小提琴:

  • 它会像预期的那样发出警报
    FOO2
  • ID在文档中必须是唯一的

  • 在Firefox中,这将正确返回
    FOO2
    。您的不一致性是由于您在多个元素上使用了相同的ID属性。这种对ID属性的滥用可能会导致奇怪的行为,因为浏览器期望每个ID都是唯一的,并且可能会有不同的行为

    我强烈建议将您的
    id=bar
    属性更改为允许复制的类,这将导致更可预测的行为


    编辑


    注意到前面的注释后,代码仍然使用class属性返回“FOO2”的预期结果。您的错误必须在代码的其他地方。

    否,您的代码会发出警报
    'FOO2'
    @伊梅维达斯:打败了你:D@genesis我承认你的胜利。:)这只是一个例子,占用的空间更少。。他们没有相同的id,他们共享一个类,再一次,只是一个例子。你的例子引入了很多潜在的问题。对于试图调试的人来说,这可能会产生很大的误导。
    <div id="FOO1">
        <div class="bar"></div>
        <div class="bar"></div>
        <div class="bar"></div>
    </div>
    <div id="FOO2">
        <div id="foo" class="bar">click me</div>
    </div>
    
    $("#foo").click(function(){
        alert($(this).parent().attr('id'));
    });