2010-08-11 101 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

相关问题