77 votes

Création d'un nouvel objet Location en javascript

Est-il possible de créer un nouvel objet Location en javascript ? J'ai une url sous la forme d'une chaîne et j'aimerais tirer parti de ce que javascript fournit déjà pour accéder aux différentes parties de celle-ci.

Voici un exemple de ce dont je parle (je sais que cela ne fonctionne pas) :

var url = new window.location("http://www.example.com/some/path?name=value#anchor");
var protocol = url.protocol;
var hash = url.hash;
// etc etc

Est-ce possible ou dois-je créer cet objet moi-même ?

123voto

CMS Points 315406

Vous pourriez utiliser un élément d'ancrage pour extraire les parties de l'url, par exemple :

var url = document.createElement('a');
url.href = "http://www.example.com/some/path?name=value#anchor";
var protocol = url.protocol;
var hash = url.hash;

alert('protocol: ' + protocol);
alert('hash: ' + hash);

Il fonctionne sur tous les navigateurs modernes et même sur IE 5.5+.

Vérifiez un exemple ici .

6 votes

Je ne savais pas qu'on pouvait faire ça. Sympa.

1 votes

+1 ce que j'étais en train de taper. C'est <a> mettent en œuvre les éléments location Les attributs de décomposition des URL remontent aux premières versions de JavaScript et sont pris en charge partout. Il est (enfin !) normalisé dans la spécification HTML5.

3 votes

+1. Idem. Je n'avais aucune idée que <a> l'emplacement mis en œuvre non plus.

41voto

Pourquoi ne pas utiliser la norme Objet URL ?

var url = new URL("http://www.example.com/some/path?name=value#anchor");
var protocol = url.protocol;
var hash = url.hash;

Avertissement : Cette interface est un peu nouvelle, donc, si vous n'utilisez pas une interface de type transpondeur s'il vous plaît, vérifiez le tableau de compatibilité et faites vos tests sur les navigateurs cibles.

8voto

epascarello Points 71353

Vous pouvez tirer parti de la puissance d'un élément d'ancrage.

var aLink = document.createElement("a");
aLink.href="http://www.example.com/foo/bar.html?q=123#asdf";
alert(aLink.pathname);

-4voto

Andir Points 1353

Vous pouvez le parser dans une regex pour obtenir les parties correspondantes... Je n'ai pas le code complet pour le moment, mais cela peut être utilisé pour obtenir les données de la requête :

var myUrl = window.location.href;
var matches = myUrl.match(/([^\?]+)\?(.+)/);
var queryData = matches[2];

matches[0] est la chaîne complète, matches(1) est la première partie de l'URL (jusqu'au ?)... vous pourriez construire une expression régulière pour analyser chaque partie d'une chaîne d'url si vous le souhaitez...

Vous pouvez également utiliser l'une des nombreuses bibliothèques existantes à cet effet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X