.split()在IE8中没有像预期的那样工作

问题描述:

我使用以下命令从变量中包含的URL中提取变量。它在现代浏览器中工作正常,但在IE8中,它在第一个变量上失败,但在第二个变量上成功。.split()在IE8中没有像预期的那样工作

var p = 'http://sagensundesign.com?height=400&width=300'; 

/* Get Height */ 
var h = p.split(/height=([0-9]+)/); 
h = h[1]; 
if (!h) {h = 500}; 
alert(h); 

/* Get Width */ 
var w = p.split(/width=([0-9]+)/); 
w = w[1]; 
if (!w) {w = 800}; 
alert(w); 

UDPATE:

这里是工作的解决方案...... http://jsfiddle.net/cssguru/B42tM/

+0

Split在各种Web浏览器上实现时存在各种错误。有些是边缘情况,有些则不是。我建议你看看下面的内容,看看你是否可以复制这个bug,然后使用这些信息来设计一个解决方法。 http://blog.stevenlevithan.com/archives/cross-browser-split – michaelward82 2012-02-28 21:05:46

待办事项你需要使用在这里分裂?你能不能只用match

var h = p.match(/height=([0-9]+)/)[1]; 

由于浏览器也有采用分体式用正则表达式http://blog.stevenlevithan.com/archives/cross-browser-split一些错误。如果您确实需要使用split以及正则表达式跨浏览器,您可以查看xregexp这是一个修复跨浏览器的正则表达式的库。

+0

感谢您的帮助。 – 2012-02-29 00:58:57

使用p.match(正则表达式),而不是:

http://jsfiddle.net/B42tM/3/

/* Get Height */ 
var h = p.match(/height=([0-9]+)/); 
h = h[1]; 
if (!h) {h = 500}; 
alert(h); 

/* Get Width */ 
var w = p.match(/width=([0-9]+)/); 
w = w[1]; 
if (!w) {w = 800}; 
alert(w); 
+0

感谢您的帮助! – 2012-02-29 00:58:36

有一个规范化脚本应该解决你所看到的不一致问题。 http://blog.stevenlevithan.com/archives/cross-browser-split

你可以找到一个匹配或者exec表达两个维度:

var p = 'http://sagensundesign.com?height=400&width=300'; 

var siz=p.match(/((height|width)=)(\d+)/g); 


alert(siz) 

/* returned value: (Array) 
height=400, width=300 
*/ 

已经有一些有效的反应,但你可能有兴趣在我来撷取网址GET参数的函数。

var get = function (name, url) { // Retrieves a specified HTTP GET parameter. Returns null if not found. 
    url = (typeof (url) === "undefined" ? window.location.href : url); 

    var regex = new RegExp("[?&]" + name + "=([^&#]*)"); 
    var results = regex.exec(url); 
    var output = (results ? results[1] : null); 

    return output; 
}; 

您可以像这样使用它。

var url = 'http://sagensundesign.com?height=400&width=300'; 

var h = get("height",url); 
var w = get("width",url);