Javascript错误(IE):对象不支持此属性或方法

时间:2010-08-11 10:47:23

标签: javascript jquery

  

2015注意:每个人都应该仔细阅读他们的旧问题,并为他们的到来感到鼓舞。这段代码有很多问题 - 很棒。

此代码在Firefox中完美运行,在IE中以“负”结尾的行完成;休息。我不知道如何解决它! 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");
});

2 个答案:

答案 0 :(得分:2)

  1. 请使用&&代替&(除非是为了最小化)
  2. String.trim尚未广泛实施。使用

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

    代替。

  3. 我宁愿将代码重写为:

    $(".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"); 
      }
    });
    

答案 1 :(得分: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

还要注意.trim()更改,没有必要每次都将它克隆为另一个jQuery对象,它已经是一个所以使用它:)至于错误:.indexOf()并非全部浏览器,这就是jQuery包含$.trim()函数的原因(原因与$.inArray()相同,IE没有var)。

同样,在声明变量时使用{{1}},否则您将创建全局变量。


作为未来读者的一部分,jQuery 1.4.3 + will use native String.prototype.trim如果在调用$.trim()时可用。{/ p>