旧版IE上的Jquery问题

时间:2011-12-21 21:28:37

标签: javascript jquery ruby-on-rails internet-explorer cross-browser

我在document.ready函数中有以下语句:

  if($("sidebar ").html().trim().length == 0)
  {
    $("sidebar").append("<p>&nbsp;&nbsp;&nbsp;The sides..</p>"); 
  };

它在IE 9中工作正常但是只要我选择IE 8(浏览器和文档标准),脚本就会停止工作并发出以下错误:

SCRIPT5007: Unable to get value of the property 'trim': object is null or undefined 
application-e51c9eee7d22e9644481115dc1fedd5f.js, line 7 character 17578

我在调试模式下查看了.js,看到上面的语句转换为:

$("sidebar ").html().trim().length==0&&$("sidebar").append("<p>&nbsp;&nbsp;&nbsp;The sides..</p>")

如何防止此错误?请注意,我确实看到节点存在于呈现的页面中。

我认为可能只是提到shiv5.html可能不足以照顾IE的特性。所以,我通过sprockets添加了modernizr.js,并在我的布局中添加了class =“no-js”。在IE&lt; 9。

中仍然没有运气

我错过了什么?我还能做些什么才能得到微软霸主的青睐?

2 个答案:

答案 0 :(得分:5)

根据MDN,trim在IE中不可用&lt; 9。

您可以改为使用$.trim

if($.trim($("sidebar ").html()).length == 0)
{
  $("sidebar").append("<p>&nbsp;&nbsp;&nbsp;The sides..</p>"); 
} // <-- Don't want a semicolon here.

如果您不想查找trim的所有实例并更正它们,MDN文章会列出另一种选择。如果它本身不可用,您可以使用以下内容创建.trim

if(!String.prototype.trim) {
  String.prototype.trim = function () {
    return this.replace(/^\s+|\s+$/g,'');
  };
}

答案 1 :(得分:0)

Check out this thread.经过快速搜索后,似乎很多人都遇到了修剪问题。