.split()在IE8中没有按预期工作

时间:2012-02-28 20:59:45

标签: javascript internet-explorer-8

我正在使用以下内容从变量中包含的URL中提取变量。它在现代浏览器中工作正常但在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/

5 个答案:

答案 0 :(得分:6)

你需要在这里使用拆分吗?你能不能只使用match

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

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

答案 1 :(得分:2)

改为使用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);

答案 2 :(得分:1)

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

答案 3 :(得分:1)

有一些有效的回复,但您可能对我用来从网址中检索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);

答案 4 :(得分:0)

您可以使用匹配或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
*/