【问题标题】:Selecting grandparent div with jQuery doesn't work in IE/Chrome使用 jQuery 选择祖父母 div 在 IE/Chrome 中不起作用
【发布时间】:2009-09-29 02:59:43
【问题描述】:

我有以下 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的alert box中的ID也是null或者""。

我是否在做一些 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,但我知道类)。感谢您的帮助和建议!

【问题讨论】:

  • 您的代码是否带有 $(document).ready(... 块?
  • Yuppers。它在 $(document).ready() 块内。

标签: jquery firefox internet-explorer google-chrome


【解决方案1】:

使用提供的示例代码,这在 IE 8.0.6001 和 Chrome 4.0.213 中可以正常工作——我收到带有“祖父母”文本的警报。

也许您的 HTML 格式不正确?

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

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

【讨论】:

    【解决方案2】:

    尝试(从类更改为 id - 抱歉):

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

    到达祖父母 div。

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

    【讨论】:

    • 1) 没有名为“祖父母”的类。 2)ID为“祖父母”的DIV只是一个例子——我相信在运行时他不会知道DIV的ID,因此也不知道问题的原因。当然,一种选择是更改 HTML 并添加一个“祖父母”类,但这不是手头的问题。
    • 这是行不通的,因为 $(",addset") 会选择所有具有 addset 类的项目。
    【解决方案3】:

    不确定兼容性问题,但也许做同样事情的替代代码可能会起作用。而不是 item.parents('div:eq(1)') 来获取父元素列表中的第一个 div,为什么不尝试 item.closest('div') 或至少 item.parents('div')。等式(1)。不过我喜欢closest,它是一个很棒的工具。

    我会尝试的另一件事是反转 addstr 变量的引号,如下所示:

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

    【讨论】:

    • 您的建议没有成功:/ 我尝试了最接近的方法,但无法检索祖父母 div
    • 在进一步搞砸之后,最接近的最终成为我采用的解决方案。我用解决方案编辑了问题。
    猜你喜欢
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多