2009-08-18 3 views
2

Existe-t-il un moyen de gérer facilement les URL de manipulation en JavaScript?Existe-t-il un moyen JavaScript simple de manipuler des URL arbitraires?

Un peu de contexte:

Je veux utiliser ThickBox, la boîte popup modale jQuery populaire, mais discrètement. Selon la documentation ThickBox je dois donner tous les liens que je veux être en modal une classe CSS de « thickbox » et changer l'URL ...

http://www.mysite.com/mypopup

... à:

http://www.mysite.com/mypopup?height=200&width=300

Je veux que cela se produise seulement si JavaScript est activé. Donc, j'obtiens tous les liens en utilisant jQuery et "hack" une détection pour le '?' caractère dans l'URL, en ajoutant "& hauteur ..." ou "? hauteur ..." en conséquence.

Dans le plus grand des cas, cela pourrait brouiller les choses si l'URL a déjà un paramètre "height", auquel cas je pourrais juste vouloir mettre à jour l'existant plutôt que d'en donner deux.

Tout sent un peu. J'ai l'impression de pirater le code qui peut/doit avoir été fait correctement une fois déjà!

Ma question est la suivante:

Y at-il quelque chose dans le monde JavaScript (plugin ou non) qui me permettrait de quelque chose comme ceci:

var url = Url(elm.attr("href")); 
url.parameter("width", "300"); 
url.parameter("height", "200"); 
elm.attr("href", url.toString()) 

Ou:

var height = Url(elm.attr("href")).parameter("height"); 

Répondre

1

Cette fonction fait cela, il suffit de l'appeler sur la page de l'URL que vous voulez analyser:

function gup(name) 
{ 
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
    var regexS = "[\\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp(regexS); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
    return ""; 
    else 
    return results[1]; 
} 

//for the URL http://www.mysite.com/mypopup?height=200&width=300 

var height = gup('height'); 
var width = gup('width'); 
alert('Height: ' + height + ' Width: ' + width); 

EDIT: Je ne sais pas comment cela utile d'utiliser (car il utilise Prototype.js) mais cela est pour la lecture et la modification de la chaîne de requête:

http://code.nontalk.com/2006/10/readmodify-querystring-variables-with.html

+0

Nice .. mais cela ne me permet pas de définir les paramètres de chaîne de requête d'URL.La clé consistait à manipuler les URL (ou HREF pourrait être une meilleure façon de le mettre). Je pourrais mettre à jour cette méthode pour prendre une URL comme paramètre très facilement (par opposition à travailler avec window.location.href), mais cela ne me permettra pas de changer ou d'ajouter des paramètres de chaîne de requête. – joshcomley

+0

Mon commentaire précédent est maintenant à propos d'une réponse complètement différente! – joshcomley

+0

@joshcomley - Je remets tout ça pour que ton commentaire ait une signification à nouveau. – karim79

0

Oui. L'objet location en javascript a quite a lot of properties.

Pour votre question: location.search = "width=300"; appliquerait "? Width = 300" à votre url.

+0

Ceci est un pas de plus, mais que se passe-t-il s'il y a 10 paramètres et que je veux mettre à jour un seul? Je pourrais le regex, mais encore une fois il semble "hacky" et comme quelque chose que quelqu'un a dû faire avant, mais mieux que moi;) – joshcomley

0

Vous pouvez probablement faire en utilisant jQuery, à savoir

$(".thickbox").each(function() { 
    this.href += "?height=200&width=300"; 
}); 

Je n'ai pas testé cela et il peut-être tort, je ne suis pas en mesure de le tester pour le moment mais nous espérons qu'il va pointez-vous dans la bonne direction si rien d'autre. Si vous avez jQuery pour Thickbox alors vous pouvez aussi bien l'exploiter pour la manipulation;)

Questions connexes