objetos - Crear un nuevo objeto de ubicación en javascript
recorrer array de objetos javascript (4)
¿Qué tal si usamos el objeto URL estándar?
var url = new URL("http://www.example.com/some/path?name=value#anchor");
var protocol = url.protocol;
var hash = url.hash;
Advertencia : esta interfaz es un poco nueva, por lo tanto, si no está usando un transpiler , consulte la tabla de compatibilidad y realice las pruebas en los navegadores de destino.
¿Es posible crear un nuevo objeto de ubicación en javascript? Tengo una url como cadena y me gustaría aprovechar lo que javascript ya proporciona para obtener acceso a las diferentes partes de la misma.
Aquí hay un ejemplo de lo que estoy hablando (sé que esto no funciona):
var url = new window.location("http://www.example.com/some/path?name=value#anchor");
var protocol = url.protocol;
var hash = url.hash;
// etc etc
¿Es posible algo así o esencialmente tendría que crear este objeto por mi cuenta?
Bueno, podrías usar un elemento de anclaje para extraer las partes de la url, por ejemplo:
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);
Funciona en todos los navegadores modernos e incluso en IE 5.5+.
Vea un ejemplo here .
Puede analizarlo en una expresión regular para obtener las partes como coincidencias ... No tengo el código completo en este momento, pero puede usarlo para obtener los datos de consulta:
var myUrl = window.location.href;
var matches = myUrl.match(/([^/?]+)/?(.+)/);
var queryData = matches[2];
matches [0] es la cadena completa, matches (1) es la primera parte de la URL (hasta la?) ... puede construir una expresión regular para analizar cada parte de una url de cadena si lo desea ...
También puede usar una de las muchas bibliotecas que ya existen para esto.
Puede aprovechar la potencia de un elemento de anclaje
var aLink = document.createElement("a");
aLink.href="http://www.example.com/foo/bar.html?q=123#asdf";
alert(aLink.pathname);