jQuery .not()和.has()在IE7中无法正常工作

时间:2012-08-09 20:23:34

标签: jquery internet-explorer-7

我想在页面上的某个<li>的末尾添加div。 我无法更改标记的结构,所以我必须从我对它的信息中钻取。 我从span.ruUploadSuccess开始,找到一个包含数组fileInfo[0]中的文本的文件 然后我从那里去了两个父母,这是我需要附加的<li>。 如果div已经存在,我不想附加这些数据,所以我检查该行是否已经有这个div(使用.has()),然后使用{{1}从我的结果中过滤出来}。

除了IE7之外,所有浏览器都能很好地工作。在IE7中,它找到了我想要附加的正确行,但它并没有过滤掉那些已经有这个div的行。这导致将相同的div追加两次(或更多次)。

是否有更简单的方法来访问此特定元素?有没有理由说这在IE7中会有不同的功能?

我的代码,用于查找要追加到的.not()元素:

<li>

以下是一些示例标记,显示了我正在尝试完成的结构:

var row = $("span.ruUploadSuccess:contains('" + fileInfo[0] + "')").parent().parent();
$(row).not($(row).has("div.contactUsAttachmentFileSize")).append(label);

2 个答案:

答案 0 :(得分:0)

如何使用filter()。它似乎比not()/。has()

更好
$(row).filter(function(){
    return !$(this).find('div.contactUsAttachmentFileSize').length;
}).append(label);
不是,小提琴 http://jsfiddle.net/wirey00/vxmGw/

filter()小提琴 http://jsfiddle.net/wirey00/B6v3A/

答案 1 :(得分:0)

我只是以一种更能表达你真正想做的方式重新编码。虽然你拥有的应该工作 - 但是很难理解,而更谨慎的方法可以避免细微的jquery东西,这可能会给旧IE带来麻烦。你的意图也更清楚了。

你真的只想测试div是否已经存在,如果不存在则添加它。所以把它写成条件。

http://jsfiddle.net/jamietre/ECVny/

var row = $("span.ruUploadSuccess:contains('test file')").parent().parent();

if (!row.find("div.contactUsAttachmentFileSize").length) {
    row.append(label);
}
相关问题