2010-08-11 135 views
3

2015 Note: Everyone should go look through their old questions and be encouraged by how far they've come. There are so many things wrong with this code – it's wonderful.Javascript錯誤(IE):對象不支持此屬性或方法

此代碼在Firefox中完美工作,在IE中以'negative'結尾);休息。我不知道如何解決它! Argghhh!

$(".topline strong").digits().each(function() { 
    s = $(this), 
    c = "change"; 
    if ($(s).hasClass(c) & $(s).text().replace(/%/gi, "") > 0) { 
     $(s).addClass("positive"); 
    } 
    if ($(s).hasClass(c) & $(s).text().trim().charAt(0) == "-") $(s).addClass("negative"); 
}); 
+0

您可以分開語句以查看哪個導致錯誤? – 2010-08-11 10:53:27

回答

2
  1. 請使用&&代替&(除非它意味着最小化)
  2. String.trim沒有被廣泛尚未實現。使用

    $(s).hasClass(c) && /^\s*-/.test($(s).text()) 
    

    代替。

我寧願重寫代碼:

$(".topline strong").digits().each(function() { 
    var s = $(this); 
    if (s.hasClass("change")) { // no need to $() an already $()-ed object. 
    var value = parseFloat(s.text()); 
    if (value != 0) 
     s.addClass(value > 0 ? "positive" : "negative"); 
    } 
}); 
+0

啊,有趣 - 儘管我確實嘗試&&。 JSLint沒有對此說過任何話。 – 2010-08-11 10:59:42

2

相反的.trim()可以使用$.trim()這樣的:

$(".topline strong").digits().each(function() { 
    var s = $(this), c = "change"; 
    if (s.hasClass(c) && s.text().replace(/%/gi, "") > 0) { s.addClass("positive"); } 
    if (s.hasClass(c) && $.trim(s.text()).charAt(0) == "-") s.addClass("negative"); 
}); 

還要注意s變化,有沒有必要克隆它作爲另一個jQuery對象,它已經是一個所以使用它:)至於錯誤:.trim()不是在所有的瀏覽器,這就是爲什麼jQuery包括$.trim()函數(同樣的原因它有$.inArray(),IE沒有.indexOf())。

此外,當聲明變量使用var,否則你正在創建全球變量。


順便爲這個未來的讀者,jQuery的1.4.3+ will use如果調用$.trim()時是可用的native String.prototype.trim

相關問題