0

我JS/jQuery的的一個非常簡單的片斷我用來提取網頁的某些內容:對JS/jQuery的的Internet Explorer 7和8的對象/語法錯誤

(function (idx) { 
    var product = $(".product_wrapper img")[idx]; 
    return (product && product.src) ? product.src.match(/([^]+)\\_/)[1] : "" 
}(0)).split('_')[1] 

作品只是在最細瀏覽器,但IE7 & IE8拋出錯誤。在IE7中,錯誤消息顯示爲[object Error],在IE8中顯示爲SyntaxError: Expected '/'

有人知道這段代碼有什麼問題嗎?我是否使用MSIE不喜歡的一些語法糖?一直困惑這一個,我很難過。

+1

你調用索引'[1]'對象沒有檢查對象的存在嗎? – aifarfa

+1

嘗試分解邏輯並試圖捕捉至少哪一行是問題所在。而不是使用一個大的'return'語句,把它分成'if/else'語句。然後,將這個立即調用函數的結果存儲到一個變量中。然後,將該字符串拆分爲「_」並將結果存儲在一個新變量中。然後,在訪問'[1]'前檢查該新變量的長度' – Ian

回答

1

如果product.src.match(/([^]+)\\_/)是空

product.src.match(/([^]+)\\_/)[1]會導致對象錯誤

+0

非常感謝,@ ai.farfa!它總是很明顯的東西:-)只要將.split包裹在三元組if/else中。感謝你的幫助! – jonaz

+0

...就這樣,以供參考:'(function(idx){var product = $(「。product_wrapper img」)[idx]; return(product && product.src)?product.src.match(/([ ^] +)\ _ /)[1] .split('_')[1]:「」}(0))' – jonaz

0

的第一步是要弄清楚爲什麼「更好」的瀏覽器,IE 8,給它的錯誤。它給出的錯誤似乎是指缺少正則表達式初始值設定項終結符,即'/'字符(正斜槓)。您的正則表達式適用於IE 9:

"foo".match(/([^]+)\\_/); 

而且我非常肯定它也可以在IE 8上運行。我建議驗證上述內容是否適用於IE 8,然後檢查以確保當您看到錯誤時,實際運行的代碼就是您所擁有的代碼。要驗證,您可以手動清除IE 8中的瀏覽器緩存,然後重新加載代碼/網頁。

0

打破(至少在IE8)最簡單的例子是這樣的:

"foo".match(/[^]/); 

的問題是,^括號中的意思是「否定」,因此,預計一些否定。 IE打破因爲這一點,它可以通過逃避克拉來解決(如果這就是你正在尋找什麼):

"foo".match(/[\^]/); 

火狐似乎解釋[^].所以它不會破壞。從您的代碼示例中不清楚您試圖從URL中提取的內容。如果您在代碼中查找克拉,請跳過原始帖子中的內容。如果您只是在尋找任何字符,因爲它在Firefox中工作,請改用.

+0

嘿丹尼斯。 @ ai.farfa(上面)說得相當簡潔:我在第三行的外部條件下調用'[1]',即沒有測試我想分割的對象存在並且可以分割。我認爲其他瀏覽器只是更加寬容這個錯誤,並沒有向控制檯拋出一個錯誤來返回未定義的結果。 – jonaz

相關問題