我有以下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,但我知道这个类)。感谢您的帮助和建议!
答案 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>';