2013-04-29 89 views
2

我注意到這一點後,用戶報告的行爲,因爲它在Chrome,Firefox和IE8 +工作正常。然而,在IE7以下選擇:jquery選擇器(選擇)拋出錯誤

$('#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)

有什麼想法可能會出錯?

回答

0

在IE7發現,和下面是getElementById區分大小寫這是我的問題的原因。

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

在IE8標準模式,getElementById執行對theID區分大小寫匹配僅屬性。 在IE7標準模式和以前的模式下,此方法對ID和NAME屬性執行不區分大小寫的匹配,這可能會產生意外的結果。

3

我不知道是什麼問題,但一些可能使它工作跨瀏覽器,以不同的方式,就是用filter

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

它說「只包括<option>元素不包含文字'新'「...並且應該與原始選擇器一樣。

filter基於return的結果包括/排除元素。如果返回true,則該元素保留在列表中。如果返回false,則從列表中刪除該元素。

使用.text()是一樣的東西:contains()看,和=== -1意味着文本沒有找到。

它可能只是我,但我喜歡更明確地選擇元素,遠離長選擇器(特別是僞選擇器)和使用jQuery方法。雖然這可能會讓你的選擇慢一點(不允許jQuery優化本地瀏覽器方法),但調試起來比我看起來更清晰,而且比大字符串更清晰(並且希望在所有瀏覽器中都適用)。

參考:

+0

過濾器是我最後的手段。感謝您的回答,但我更感興趣的是爲什麼IE會拋出錯誤。這是我第一次遇到與jquery選擇器的跨瀏覽器兼容性問題。 – icramc 2013-04-29 19:09:04