使用jQuery选择grandparent div在IE / Chrome中不起作用

时间:2009-09-29 02:59:43

标签: jquery firefox internet-explorer google-chrome

我有以下jQuery函数:

function GetGrandparentDiv(item) {
    return item.parents('div:eq(1)');
}

以下函数调用:

$(".addset").click(function(e){
        e.preventDefault();

        var addstr = "<span class='setrow'>random html</span>";
        var gp = GetGrandparentDiv($(this));
        alert(gp.attr('id'));
        gp.find("div.esets").append(addstr);

    });

如你所见,我在那里发出警报。该代码在FireFox中运行良好,并显示了父父div的正确ID。但是,在IE和Chrome中,它不起作用。 IE / Chrome中警告框中的ID也为空或“”。

我做的是IE / Chrome不支持的内容吗?

修改

Html看起来有些效果(我没有在我面前)

<div id="grandparent">
     <div id="parent">
           <input type="button" class="addset" value="Add Set" />
           <!-- other stuff -->
     </div>
     <!-- other stuff -->
</div>

修改 这是实际的HTML,因为我现在把它放在我面前:

<div id="random2" class="ebox">
    <div class="ebheader">
        <!-- text -->           
         <span class="right">
             <input type="button" class="addset" value="Add Set"/>
        </span>
    </div>
<!-- other stuff -->
</div>

由于某些奇怪的原因,使用GetGrandparentDiv()函数在除FF之外的任何其他函数中都不起作用。具有讽刺意味的是,我在我的应用程序的其他区域使用该功能,并且它可以正常工作。

我最终为解决方案做了以下事情:

var gp = $(this).closest(".ebox");

因为每个动态添加的'容器',如果你有一个类型.ebox的类(因为我不知道div的id,但我知道这个类)。感谢您的帮助和建议!

3 个答案:

答案 0 :(得分:1)

尝试(从课程改为id - 对不起):

$(".addset").closest("#grandparent");

到达祖父母div。

或者,$(“。addset”)。parent()。parent();如果你不知道div的id。

答案 1 :(得分:1)

使用提供的示例代码,这在IE 8.0.6001和Chrome 4.0.213中按预期工作 - 我收到带有“祖父母”文本的提醒。

也许你有一些格式错误的HTML?

此外,这个语法应该工作相同(至少它在我对这个问题的测试中做了),但你可以试一试,看看:

function GetGrandparentDiv(item) {
    return item.parents('div').eq(1);
}

答案 2 :(得分:0)

不确定兼容性的东西,但也许替代代码可能会起作用。而不是item.parents('div:eq(1)')来获取父元素列表中的第一个div,为什么不尝试item.closest('div')或至少item.parents('div')。当量(1)。我喜欢closest,但这是一个很棒的工具。

我要尝试的另一件事是反转addstr变量的引号,如:

 addstr = '<span class="setrow">random html</span>';