2012-02-28 4 views
5

J'utilise ce qui suit pour extraire des variables d'une URL contenue dans une variable. Il fonctionne très bien dans les navigateurs modernes, mais dans IE8, il échoue sur la première variable, mais réussit sur la seconde..split() ne fonctionne pas comme prévu dans 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:

Voici la solution de travail ... http://jsfiddle.net/cssguru/B42tM/

+0

Split a plusieurs bogues dans son implémentation sur différents navigateurs Web. Certains sont des cas de bordure, d'autres non. Je vous suggère de jeter un oeil à ce qui suit pour voir si vous pouvez reproduire le bug et ensuite utiliser cette information pour concevoir une solution de contournement. http://blog.stevenlevithan.com/archives/cross-browser-split – michaelward82

Répondre

6

Do vous devez utiliser divisé ici? Pouvez-vous pas seulement utiliser match:

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

Comme les navigateurs ont quelques bugs en utilisant split avec une expression régulière http://blog.stevenlevithan.com/archives/cross-browser-split. Si vous avez besoin d'utiliser split avec un navigateur croisé regex, vous pouvez regarder xregexp qui est une bibliothèque qui corrige les regexs à travers les navigateurs.

+0

Merci pour l'aide. –

2

Utilisez p.match (regex) à la place:

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

Merci pour l'aide! –

0

Vous trouverez les deux dimensions avec un match ou une expression 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

Il y a eu des réponses valides, mais vous pouvez être intéressé par une fonction que j'utilise pour récupérer GET paramètres à partir d'URL.

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; 
}; 

Vous pouvez l'utiliser comme ceci.

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

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