2012-02-28 62 views
5

我使用以下命令從變量中包含的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

回答

6

待辦事項你需要使用在這裏分裂?你能不能只用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

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); 
+0

感謝您的幫助! – 2012-02-29 00:58:36

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 
*/ 
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); 
相關問題