2009-09-29 73 views
0

工作,我有以下的jQuery功能:选择祖父母格不能在IE/Chrome的

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的(因为我不知道的id该div,但我知道这个班)。感谢您的帮助和建议!

+0

是您的代码withing一个$(文档).ready(... block? – karim79 2009-09-29 03:03:02

+0

Yuppers。它位于$(document).ready()块内。 – MunkiPhD 2009-09-29 03:11:32

+0

couldnotreproduce – ken 2009-09-30 04:20:03

回答

0

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

另一件事我会尝试正反转报价为addstr变量,如:

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

我没有成功与您的建议:/我试图最接近,但无法让它检索grandparent div – MunkiPhD 2009-09-29 03:46:57

+0

经过进一步的调整之后,最接近最终成为我与之一起的解决方案,我用解决方案编辑了这个问题 – MunkiPhD 2009-09-29 23:42:10

1

尝试(从类改为ID - 对不起):

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

到达祖父母分部。或($。“addset”)。parent()。parent();如果你不知道div的id。

+0

1)没有名为“祖父母”的班级。 2)ID为“祖父母”的DIV仅仅是一个例子 - 我相信在运行时他不会知道DIV的ID,因此也不知道问题的原因。当然,一种选择是改变HTML并添加一个“祖父母”类,但这不是问题的关键。 – ken 2009-09-29 17:59:32

+0

这不起作用,因为做$(“,addset”)会选择一个addset类的所有项目。 – MunkiPhD 2009-09-29 23:40:18

1

所提供的示例代码,这个工程预期在IE 8.0.6001和Chrome 4.0.213 - 我与文本“祖父母”的警报。

也许你有一些格式不正确的HTML?

此外,这句法应该工作一样(至少在我的测试做了这个问题),但你可以给它一个镜头,看看:

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

我尝试了所有这些变化,但它仍然无法正常工作。 – MunkiPhD 2009-09-29 23:39:36