2

在用户报告该行为后,我注意到了这一点,因为它在 Chrome、Firefox 和 IE8+ 上运行良好。但是在 IE7 中,以下选择器:

$('#parentjobs option')
$('#parentjobs option:not(:contains("new"))')

抛出这个错误:

Error: Unable to get value of the property '0': object is null or undefined

指向 jquery-1.8.3 上的第 5126 行:

context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0];

我没有安装 IE7,但是当我在 IE 调试页面 (F12) 上将文档模式和浏览器模式切换到 IE7 时,我可以重现错误

有什么想法可能会出错吗?

4

2 回答 2

3

我不确定问题出在哪里,但是可能以不同的方式使其跨浏览器工作的方法是使用filter

$("#parentjobs").find("option").filter(function () {
    return $(this).text().indexOf("new") === -1;
});

其中说“仅包含<option>不包含文本'new'的元素”......并且应该与您的原始选择器相同。

filter根据 . 的结果包含/排除元素return。如果true返回,则元素留在列表中。如果false返回,则从列表中删除该元素。

使用与查看.text()相同,表示找到文本。:contains()=== -1

可能只是我,但我喜欢更明确地选择元素,远离长选择器(尤其是伪选择器)并改用 jQuery 方法。尽管这可能会使您的选择变慢一些(不允许 jQuery 优化本机浏览器方法),但它比大字符串更容易调试并且对我来说看起来更干净(希望适用于所有浏览器)。

参考:

于 2013-04-29T17:39:51.070 回答
0

发现在 IE7 及以下版本getElementById区分大小写,这是我的问题的原因。

http://msdn.microsoft.com/en-us/library/ie/ms536437(v=vs.85).aspx

在 IE8 标准模式下,getElementById仅对 ID 属性执行区分大小写的匹配。在 IE7 标准模式和以前的模式中,此方法对 ID 和 NAME 属性执行不区分大小写的匹配,这可能会产生意外结果。

于 2013-04-30T17:41:08.663 回答