Je construis Je construis une bibliothèque JS qui a besoin d'examiner la forme [Action] et de valeurs [href] et de les résoudre en URL absolus. P>
Par exemple, je suis sur http: // A / B / C / D; P? Q et rencontrez une valeur HREF de "../g" (supposons qu'il n'y a pas d'élément
Y a-t-il une bibliothèque JS qui le fait déjà? Je devrais le croire. P>
Pour plus d'informations sur ce qui est nécessaire, la spécification: https://www.rfc-editor.org/rfc/rfc3986#ssection- 5.4 p>
4 Réponses :
Il s'avère que l'attribut .href code> d'un élément (non
.getattribute ('href') code>, mais
.href code>) renvoie l'URL résolue (absolue). P>
En d'autres termes, la propriété dom i> (accédée via someanchorelement.href code>) renvoie l'URL résolue et l'attribut html i> (accédée via
someanchorelement.getattribute ('href') code> ou
someanchorelement.attributes.href code>) le retourne comme à l'origine écrit dans le HTML. (Eh bien, même ce n'est pas 100% vrai, mais Googling 'PROP vs ATTR' va parcourir beaucoup de discussions pertinentes.)
Exactement, vous n'avez pas besoin d'une bibliothèque pour le faire.
belle solution pure js qui fonctionne sans DOM: https://gist.github.com/1088850 (fonctionne partout, mais particulièrement utile pour JS côté serveur). P>
Dans les navigateurs et nœuds modernes, le constructeur d'URL intégré gère ceci: (rendement Si vous souhaitez que la base soit relative au document actuel, vous pouvez le faire explicitement: p> http: //a.example/with/a/long/path. Fichier? Newsearch Code>) P>
u = (new URL("?newSearch", document.location)).href
Le javascript URL constructeur traite des URL relatives . Donc, dans votre cas:
Pourquoi préféreriez-vous le .Origin code> sur
window.location code> ou
document.location code>? Cela briserait le chemin relatif de l'OP ("../g"), ainsi que des fragments relatifs ou des chaînes de recherche.
@ERICP Je ne me souviens pas de pourquoi, franchement, mais vous avez raison, origine code> ne conviendrait pas au cas de l'OP. Quoi qu'il en soit, en ayant un deuxième regard sur la question de l'OP, il semble que le paramètre de base provienne de l'attribut
action code> d'un élément
formulaire code> DOM, pas de l'emplacement actuel (bien que Plus tard dans sa question, le «je suis sur» peut suggérer autrement). En ce qui concerne les cordes de recherche, selon sa question, il n'est pas intéressé à les garder. J'ai édité ma réponse avec un extrait plus pertinent.