IE不支持使用Javascript分割字符串

4
我有以下代码:
$('#smallcart .plusone').live('click',function(){
   var id = $(this).attr('id');
   articlenr = id.split('_')[1];
});

这在火狐、Safari和Chrome中都可以正常工作,但在IE(7和8)中,在split函数上会引发错误(此对象不支持此属性或方法)。
如果我警告“id”变量,我会得到类似于plus_5751的内容。 (因此,我想获得“5751”的部分) 如果我执行alert(typeof(id)),我会得到String的答案……
也许有人可以指点我正确的答案?
谢谢

1
可能是重复的问题,与https://dev59.com/rknSa4cB1Zd3GeqPN3H5相同。 - ArK
@Paniyar:这不是重复的问题。那个问题的原因是使用正则表达式来拆分字符串 - 这个问题是关于通过另一个字符串来拆分字符串的。 - Andy E
我无法重现它:http://jsbin.com/imoki3 - Kobi
对我来说很好用(示例)。要不要添加脚本标签,最好再加上一个指向工作页面的链接。 - Gabriele Petrioli
@Kobi - 真的吗?我就知道!IE 对我有意见了!当我尝试时仍然会出现错误... :-( - Ian
3个回答

4
< p >在IE中,split函数的表现相当不错。问题出在等号左边的部分。它是一个对象,其中所有的输入字段都具有名称articlenr,因此当您尝试将字符串分配给它时,IE会停止,并显示“此属性或方法不受此对象支持”的错误信息。< /p >

是的!!! 如果我在“articlenr”前面加上“var”,它就可以工作了。非常感谢,希望您和您所爱的人有美好的一天! - Ian
1
@Ian - 如果这个回答解决了你的问题,请考虑点击勾选来标记它为被接受的答案。 - Marc Gravell

2

你的代码在Internet Explorer中可以完美运行 - 这是应该预期的。问题可能出在其他地方,也许是有东西覆盖了String.prototype.split?你可以在http://jsfiddle.net/AndyE/6K77Y/上看到你的代码的工作示例。首先要检查的是脚本中是否有任何针对Internet Explorer的特定代码。

我会提供一个小的改进以提高效率。 $(this).attr('id');实际上就是写this.id的冗长方式。这样做会更慢,因为必须创建一个新的jQuery对象,然后才能运行attr函数。如果不使用它,则可以更加压缩代码,同时仍然非常易读,如果你喜欢的话:

$('#smallcart .plusone').live('click',function(){
   articlenr = this.id.split('_')[1];
});

0

尝试将您的变量“id”重命名为其他名称。当您在脚本中使用与DOM中的项目相同的名称时,IE不喜欢它。

算了,这似乎不是这种情况下的问题。然而,我过去曾遇到由于变量名称引起的IE特定错误。


这不是问题,id 在这里被声明为一个带有 var 关键字的局部变量。 - Andy E
在DOM中没有具有“id”为“id”的项目。 - Gabriele Petrioli
这是一个好的提示:有一些名称会失败(例如status),但是var应该可以帮助解决问题,而id似乎没问题。 - Kobi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接