2012-08-09 2 views
0

Я создаю скрипт. Это получит элемент href. Но я хочу только последнюю часть этого URL-адреса. Я делаю это:Получить URL-адрес элемента

var newURL = $(".list-portfolio a").attr("href"); 
    pathArray = newURL.split('/'), 
     secondLevelLocation = pathArray[0]; 

    var newPathname = ""; 
    for (i = 3; i < pathArray.length; i++) { 
     newPathname += "/"; 
     newPathname += pathArray[i]; 
    } 

Это результаты /portfolio/ruimzicht.html Thats почти хорошо. Как я могу удалить первый /.

У вас есть вопросы по улучшению кода?

ответ

2

Почему бы не использовать функцию массива?

var pathArray = ["portfolio", "ruimzicht.html"]; 

// build a string by inserting a forward slash between all elements 
pathArray.join("/"); 

// results in: portfolio/ruimzicht.html 

Если вы просто заинтересованы в последней части в любом случае, вы можете сжать это в один лайнер:

url.split("/").pop(); // yields "ruimzicht.html" 
0

Попробуйте использовать это, чтобы избежать первую конкатенации /:

for (i = 3; i < pathArray.length; i++) 
{ 
    if(i != 3) 
     newPathname+= "/"; 

    newPathname += pathArray[i]; 
} 
0
newPathname = newPathname.trim("/"); 
+1

Не работает на IE <9, Opera <10.5. Просто нужно иметь в виду. –

+0

Я на самом деле не знал этого, спасибо за головы – nickaknudson

0

Я считаю, что делает URL разбора таким образом делает код хрупкий и подверженный ошибкам. Вместо выполнения всех операций разделения строк и/или регулярных выражений вы можете использовать сторонний плагин, например jQuery-URL-Parser, который позволяет вам получить URL-адрес от элемента и разложить его на разные части, чтобы вы могли получить доступ к имени файла или имя хоста и т. д. Вот пример того, как использовать его в вашем случае.

var url = $.url($(".list-portfolio a").attr("href")); 
url.attr('file'); // this will give you ruimzicht.html 

Это делает код более простым и понятным для чтения и обслуживания.

+0

Парсер URL - отличная идея, если у вас их тонны. Включение 170-линейного плагина для преобразования двухстрочного изображения в двухстрочный интерфейс кажется интуитивным. –

+0

Я согласен с вашей точкой зрения, но я все же считаю, что код, представленный в вопросе, хрупкий и подверженный ошибкам. Если добавление подключаемого модуля является излишним для приложения, то, по крайней мере, откройте исходный код и посмотрите, как он реализован и если он может быть использован. Кроме того, по моему опыту, много кода начинается с использования в одном месте, но по мере того, как приложение растет, прежде чем вы это узнаете, вы делаете то же самое в нескольких местах. –

+0

Конечно, я полностью согласен, что он начинается в одном месте и растет оттуда. Из-за этого я собираюсь реорганизовать наше приложение;). Как вы сказали, это зависит от варианта использования. Лично я ненавижу прослушивать моих пользователей сотнями килобайт Javascript для выполнения тривиальных задач. Не обижайся, только мои 2 цента. Я все для упрощения работы и лени, поэтому мне не нужно снова изобретать то, что другие уже делали лучше меня. –

Смежные вопросы