JavaScript - Получить часть пути URL - PullRequest
151 голосов
/ 04 августа 2011

Как правильно вывести только путь из URL с помощью JavaScript?

Пример:
У меня есть URL
http://www.somedomain.com/account/search?filter=a#top
но я бы хотел получить эту порцию
/ счет / поиск

Я использую jQuery, если есть что-то, что можно использовать.

Ответы [ 3 ]

371 голосов
/ 04 августа 2011

Существует свойство встроенного объекта window.location, которое будет предоставлять его для текущего окна.

// If URL is http://www.somedomain.com/account/search?filter=a#top

window.location.pathname // /account/search

// For reference:

window.location.host     // www.somedomain.com (includes port if there is one)
window.location.hostname // www.somedomain.com
window.location.hash     // #top
window.location.href     // http://www.somedomain.com/account/search?filter=a#top
window.location.port     // (empty string)
window.location.protocol // http:
window.location.search   // ?filter=a  



Обновите, используйте те же свойства для любого URL:

Оказывается, эта схема стандартизирована как интерфейс с именем URLUtils , и угадайте, что? И существующий window.location объект и якорные элементы реализуют интерфейс.

Таким образом, вы можете использовать те же свойства, что и выше, для любого URL & mdash; просто создайте якорь с URL и получите доступ к свойствам:

var el = document.createElement('a');
el.href = "http://www.somedomain.com/account/search?filter=a#top";

el.host        // www.somedomain.com (includes port if there is one[1])
el.hostname    // www.somedomain.com
el.hash        // #top
el.href        // http://www.somedomain.com/account/search?filter=a#top
el.pathname    // /account/search
el.port        // (port if there is one[1])
el.protocol    // http:
el.search      // ?filter=a

[1]: Поддержка браузером свойств, включающих порт, не согласована, см .: http://jessepollak.me/chrome-was-wrong-ie-was-right

Это работает в последних версиях Chrome и Firefox . У меня нет версий Internet Explorer для тестирования, поэтому протестируйте себя на примере JSFiddle.

Пример JSFiddle

Существует также объект URL, который будет предлагать эту поддержку для самих URL, без элемента привязки. Похоже, что в настоящее время стабильные браузеры его не поддерживают, но говорят, что он появится в Firefox 26. Если вы думаете, что у вас может быть поддержка, попробуйте здесь .

46 голосов
/ 04 августа 2011
window.location.href.split('/');

Даст вам массив, содержащий все части URL, к которым вы можете обращаться, как обычный массив.

Или более элегантное решение, предложенное @Dylan, с только частями пути:

window.location.pathname.split('/');
27 голосов
/ 04 августа 2011

Если это текущий URL-адрес, используйте window.location.pathname , иначе используйте это регулярное выражение:

var reg = /.+?\:\/\/.+?(\/.+?)(?:#|\?|$)/;
var pathname = reg.exec( 'http://www.somedomain.com/account/search?filter=a#top' )[1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...