在用户报告此行为后我注意到了这一点,因为它在 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 时可以重现该错误
知道可能出了什么问题吗?
最佳答案
我不确定问题是什么,但可能会以不同的方式使其跨浏览器工作,那就是使用 filter
:
$("#parentjobs").find("option").filter(function () {
return $(this).text().indexOf("new") === -1;
});
这表示“仅包含不包含文本“new”的 <option>
元素”...并且应该执行与原始选择器相同的操作。
filter
根据 return
的结果包含/排除元素。如果true
返回后,该元素保留在列表中。如果false
返回后,该元素将从列表中删除。
使用.text()
与 :contains()
相同看着,然后 === -1
表示未找到文本。
这可能只是我的问题,但我喜欢更明确地选择元素,远离长选择器(尤其是伪选择器)并使用 jQuery 方法。虽然这可能会使您的选择速度稍慢(不允许 jQuery 优化 native 浏览器方法),但它更容易调试,并且对我来说比大字符串看起来更干净(希望在所有浏览器中都适用)。
引用:
关于javascript - 带有选项(select)的jquery选择器抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16284843/