2011-04-27 130 views
2

我爲tablesorter javascript插件創建了一個新的解析器,它在所有瀏覽器中都能正常工作,但在IE7中工作正常!TableSorter jQuery RegExp不能在IE7上工作

$.tablesorter.addParser({ 
    id: 'currencyXYZ', 
    is: function (s) {return /[^\d]*$/.test(s);}, 
    format: function (s) {return $.tablesorter.formatFloat(s.replace(new RegExp(/[^\d]/g),''));}, 
    type: 'numeric' 
}); 

基本上我會替換除表格單元格外的所有字符,對吧?如果我的表格單元格我有「從£500」,則返回「500」,但在IE7我越來越像「1.09387348273428e + 35」 ...我在做什麼錯?

+0

什麼是你做錯了什麼?我很想說'使用IE7'。有沒有可能將它分開,將s.replace操作返回,以便我們看到會產生什麼? – 2011-04-27 10:05:31

+0

嗨,傑夫,我希望我能停止支持IE7 ...........我不再支持IE6,這已經是一場漫長的戰鬥......我剛剛改變了我原來的定製解析器,和IE7我只得到了最後一個數字: – plunctplactzoom 2011-04-27 10:22:55

+0

$ .tablesorter.addParser({ \t \t ID: 'currencyXYZ', \t \t是:功能(S){退貨/ [£,從\ s] * $ /。 test(s);}, \t \t format:function(s){return $ .tablesorter.formatFloat(s.replace(new RegExp(/ [£,from \ s]/g),''));}, \t \t類型:'數字' \t}); – plunctplactzoom 2011-04-27 10:23:25

回答

0

爲什麼不嘗試這樣的事情呢?

format: function (s) { 
    var re = new RegExp(/£([\d][\d,]+)/g); 
    var m = re.exec(s); 
    return m == null ? 0 : m[1].replace(',', ''); 
} 

這將積極尋找符合£\d[\d,]+,只返回數字分量的第一個值。如果您支持多種貨幣,國際號碼格式等,您可能需要調整此設置。

+0

傑夫!它像一個魅力一樣工作!非常感謝你! 我只需要將變量修改爲'var m = re.exec(s);'讓它工作! :) – plunctplactzoom 2011-04-27 13:38:18

+0

好點子...我測試了它沒有使用完全相同的接口的線束。壞傑夫。我很高興它的工作方式:) – 2011-04-27 13:52:39

0

第一個問題是您正在將正則表達式文本傳遞給需要字符串的RegExp構造函數。即這是錯誤的語法:

s.replace(new RegExp(/[^\d]/g),'')); 

要解決它,只需使用正則表達式字面直接像這樣:

s.replace(/[^\d]/g,''));