2013-03-16 38 views
1

我在javascript插件之一有一个排序功能和代码看起来成才这样的:号预期的错误在IE浏览器上比较字符串

groups = groups.sort(function (a, b) { 
    a = a.content.toString().toLowerCase().replace(/\s+/g, ''); 
    b = b.content.toString().toLowerCase().replace(/\s+/g, ''); 
if(a > b){ //stops and gives error here 
return 1; 
} 
if(a < b){ 
return -1; 
} 
return 0; 
}); 

a.content实际上是一个字符串本身(但只是IE的缘故,我在代码中添加了.toString()
在所有其他浏览器上,上述代码在所有浏览器上运行良好,但在IE 8上运行良好,上面的代码显示了JavaScript错误并停止在上面代码中显示的行上。控制台在此行显示“Number expected”消息。

(Someti mes a.content可能也有这种形式的一些html - >
"<span>Sample String</span>"
不知道这是否会导致IE8中的错误,但问题只发生在这个浏览器中)
我该如何摆脱这个错误?

+0

由于它是浏览器特定的,因此它需要一些修补程序,因为它对我来说并不明显,至少在IE中出了什么问题。你可以创建一个jsfiddle,将一些样本值加载到组中,以便我们可以复制该错误? – BrianHall 2013-03-16 09:56:09

回答

0

我记得在IE中有一些问题,IE添加了一些空白...尝试修剪。

或者...您是否尝试过使用.localeCompare比较字符串?

alert('a'.localeCompare('b')); 
alert('a'.localeCompare('a')); 
alert('b'.localeCompare('a')); 
+0

我尝试过'localeCompare',但是搞乱了我的排序。例如:'Relaucch112'出现在“重新启动”之前或类似的东西。由于排序并不完全符合我的要求,所以我没有试图查看localeCompare。 – user1240679 2013-03-16 10:12:32

+0

此外,我在上面的帖子中为'.replace()'写的代码将删除空格,所以我认为这不应该是一个问题 – user1240679 2013-03-16 10:13:49

2
a = a.content.toString().toLowerCase() 

使用这个代替

var a1 = a = a.content.toString().toLowerCase() 

因为那里有与IE < 9 toLowerCase随机返回未知数据类型的问题......如果你不重新分配在排序的变量,它会表现出来。

+0

标记为已回答? – tfforums 2013-12-19 00:18:48