Comments 60
typeof( param1 )
Это не очевидный момент, но typeof — это унарный оператор, а не функция. То есть скобки в данном случае не нужны и их можно опустить.
+3
Так читается лучше, ну по крайней мере на мой взгляд. Это уже из оперы coding standards — у каждого свои тараканы.
+4
Не припомню ни в одном coding standard для JS такого правила. И они как раз создаются, чтобы тараканы были общие:)
-2
так-то можно развернуть холивары на тему
и
Ну или
и
Я это к тому, что по какому ману/гайду учился — так и пишешь на протяжении долгого-долгого времени, покуда не появится таск «Переучиться»
А я так вообще зеленый, воспоминания о первом учебнике слишком свежи%) А по сему к первому комменту — впитал, усвоил, исправлюсь =)
function(){
}
и
function()
{
}
Ну или
if($case1)
return 1;
else
return 2;
и
if($case1){
return 1;
} else{
return 2;
}
Я это к тому, что по какому ману/гайду учился — так и пишешь на протяжении долгого-долгого времени, покуда не появится таск «Переучиться»
А я так вообще зеленый, воспоминания о первом учебнике слишком свежи%) А по сему к первому комменту — впитал, усвоил, исправлюсь =)
0
"* т.е. схема может быть и не указана."
То есть схем может быть сколько угодно?)
То есть схем может быть сколько угодно?)
0
>([a-z0-9][a-z0-9_\-\.]+) — HOST, насколько я знаю, начинаться доменное имя может только с буквы/цифры, а дальше уже могут идти и — и _ и. Более того, не бывает доменных имен короче 6 символов, но ведь ссылки то бывают и внутрисетевые, где хостнеймами как хочешь так и рулишь, та что сойдет и 1+ символ.
«яндекс.рф» под вашу регулярку не подходит, в другой статье регулярка удачнее, с поддержкой IDN.
ya.ru — домен из 5 символов, непонятно, почему вы считаете, что короче 6 не бывает.
«яндекс.рф» под вашу регулярку не подходит, в другой статье регулярка удачнее, с поддержкой IDN.
ya.ru — домен из 5 символов, непонятно, почему вы считаете, что короче 6 не бывает.
+2
Насчет 6 — обсчитался, дело было в 4 утра, математика начала подводить. 2 + 2 + точка почему-то посчитал 6%)
Насчет IDN — ну вот тут не сказать что не знал об этом… Я их не признаю, вообще никак..рф за домен не считаю. Может эта точка зрения неверна, но осталась она еще с тех времен когда в seo работал, тогда они только появились и вообще не продвигались.ну да не о том речь!
Коли надо — сделаем.
Насчет IDN — ну вот тут не сказать что не знал об этом… Я их не признаю, вообще никак..рф за домен не считаю. Может эта точка зрения неверна, но осталась она еще с тех времен когда в seo работал, тогда они только появились и вообще не продвигались.ну да не о том речь!
Коли надо — сделаем.
-5
Ещё одно решение: В ноде есть url. Он адаптирован для браузера в составе node-browser-builtins.
+4
Регулярка не работает с URL вида
Такое часто нужно, когда требуется, чтобы ресурс подгружался с той же schema, что и сама страничка.
//habr.ru
Такое часто нужно, когда требуется, чтобы ресурс подгружался с той же schema, что и сама страничка.
+3
Где был гугл, когда она мне была нужна=)
0
И вот тут появляется дилемма. Написать все то же самое только самому или перейти на эту либу %)
0
[жалуюсь] В любом браузере есть внутренние классы, которые предназначены для разбора URL и для обратного составления строки с адресом. Почему не добавить в стандартную библиотеку JavaScript нормальный API для работы с URI? Такое ощущение, что авторам браузеров намного важнее реализовать 3D графику с аппаратным ускорением, чем добавить один единственный класс для нормальной работы с URL. В результате имеем несколько разных pure-JavaScript библиотек, которые не всегда попадают в спецификацию, и работают заведомо медленней, чем нативная реализация. [/жалуюсь]
Спасибо автору за очень полезную библиотеку. А почему нет ссылки на Github/Bitbucket репозиторий?
Спасибо автору за очень полезную библиотеку. А почему нет ссылки на Github/Bitbucket репозиторий?
+2
А зачем юзать один windows.location, когда можно просто создать:
var el = document.createElement('a');
el.href = 'http://habrahabr.ru/post/232073/#comment_7837811';
alert(el.pathname); // '/post/232073/'
+10
Опередили, тоже хотел автору предложить этот способ))) у ссылки только нет query, но всё решается применением split к el.search.
0
Вот примерно так можно из el.search получить query:
Написал так, чтобы в консоль можно было вставить и сразу проверить.
var query = {};
'?sd=fdg&fd=&&sd=8'.substring(1).split('&').forEach(function(value) {
value = value.split('=');
if (value[0] in query) {
if (!(query[value[0]] instanceof Array))
query[value[0]] = [query[value[0]]];
query[value[0]].push(value[1]);
} else
query[value[0]] = value[1];
});
query;
Написал так, чтобы в консоль можно было вставить и сразу проверить.
0
да я его только в 1 месте использую, для перехода по сгенерированному URL
Или вы в принципе про использование
go: function(){
if(!this.data.scheme && this.data.host)
this.data.scheme = 'http';
window.location.href = this.update().url;
}
Или вы в принципе про использование
document.createElement('a')
вместо window.location
?+1
Да причем здесь вообще location, там просто находятся данные по текущему урлу страницы и методы для перехода на другую.
А document.createElement('a') создает элемент ссылки, который прекрасно может распарсить урл именно так как сделал бы браузер, зачем делать то что уже продумано людьми, которые создавали браузер.
Да и вам следует почитать теории, потому то странно сравнивать такие вещи, если вы к примеру установить у location свойство pathname то перейдете на другую страницу, а если это же свойство установить ссылке, то никуда вы не перейдете, а спокойно сможете взять получившийся урл из свойства href ссылки.
А document.createElement('a') создает элемент ссылки, который прекрасно может распарсить урл именно так как сделал бы браузер, зачем делать то что уже продумано людьми, которые создавали браузер.
Да и вам следует почитать теории, потому то странно сравнивать такие вещи, если вы к примеру установить у location свойство pathname то перейдете на другую страницу, а если это же свойство установить ссылке, то никуда вы не перейдете, а спокойно сможете взять получившийся урл из свойства href ссылки.
0
Ну это ясное дело что переход по ссылке будет.
И самая большая проблема заключается как раз в том, что каждый разработчик, делая свой браузер «Делает свой интернет» и что работает в одном — не факт что будет работать в другом, а если и будет работать не обязательно будет работать так же. Примеров весь инет.
Собственно это и есть причина моего нежелания использовать
И самая большая проблема заключается как раз в том, что каждый разработчик, делая свой браузер «Делает свой интернет» и что работает в одном — не факт что будет работать в другом, а если и будет работать не обязательно будет работать так же. Примеров весь инет.
Собственно это и есть причина моего нежелания использовать
document.createElement('a')
-2
Только делая очередную библиотеку, вы делаете очередной «свой интернет», со своими глюками. Поэтому, странно, не полагаться на логику парсинга URL браузером, но при этом полагаться на логику регулярных выражений, предоставляемых тем же браузером. Да и вообще, с чего вы решили, что они делают эту задачу хуже, чем ваша библиотека?
+2
Ни в коем случае не претендую на «лучшее» решение.
Просто на мой взгляд — регэксп надежнее. И это не «уперся лбом», а просто мнение, которое легко изменить любыми пруфами обратного.
Для меня это в первую очередь «спортивны интерес», а данный пост — расшаривание личного опыта, да и самого кода (что полезно, ибо что может быть лучше конструктивной критики?) который будет перепиливаться. Точнее вот прям щас он уже перепиливается.
Вот например на текущий момент я уже получил по меньшей мере альтернативный вариант парсинга урла.
Просто на мой взгляд — регэксп надежнее. И это не «уперся лбом», а просто мнение, которое легко изменить любыми пруфами обратного.
Для меня это в первую очередь «спортивны интерес», а данный пост — расшаривание личного опыта, да и самого кода (что полезно, ибо что может быть лучше конструктивной критики?) который будет перепиливаться. Точнее вот прям щас он уже перепиливается.
Вот например на текущий момент я уже получил по меньшей мере альтернативный вариант парсинга урла.
-1
Простейший пример:
var link = document.createElement('a');
link.href = 'ya.ru';
return link.hostname;
// ->
0
А ваша библиотека работает только с абсолютным URL? Потому как браузер работает и с относительными ссылками тоже, и в данном случае он корректно посчитает данный пример, как указание на элемент «ya.ru» относительно текущего пути. Следует четко понять, с каким стандартом вы работаете.
+2
Это, я бы сказал, неоднозначность.
Ибо
В текущем случае,
НО! я то например подразумевал домен, в данном случае.
как обрабатывать такие непонятки — пока не определился.
Ибо
hosthame
имеет ровно ту же структуру, что и filename
, например,, и достоверно по неполному/неправильному линку не всегда можно определить домен это или путь.В текущем случае,
ya.ru
, по-правилам, является filename
, т.е. относительной ссылкой на файл ya.ru лежащий в той же директории.НО! я то например подразумевал домен, в данном случае.
как обрабатывать такие непонятки — пока не определился.
0
Стоп-стоп, неоднозначности здесь нет: «ya.ru» — вполне корректный относительный адрес, и если ваша библиотека поддерживает RFC{№ лень искать} относительных URI, то тут однозначно ya.ru — это pathname.
Некорректность тут может быть, если вы поддерживаете другой стандарт, который не предполагает относительных ссылок, т. к. «ya.ru» — это неправильный формат для URL, и минимально, он должен быть "//ya.ru", чтобы трактовать его как hostname. То что вы подразумеваете «ya.ru» как домен, вы лишь подразумеваете исходя из знакомого наименования и не следуя стандартам. Следует поменять немного строку на «index.html», и вы уже будете подразумевать из логики совершенно противоположное.
Некорректность тут может быть, если вы поддерживаете другой стандарт, который не предполагает относительных ссылок, т. к. «ya.ru» — это неправильный формат для URL, и минимально, он должен быть "//ya.ru", чтобы трактовать его как hostname. То что вы подразумеваете «ya.ru» как домен, вы лишь подразумеваете исходя из знакомого наименования и не следуя стандартам. Следует поменять немного строку на «index.html», и вы уже будете подразумевать из логики совершенно противоположное.
+2
Совершенно верно.
Неоднозначность я имел в виду — по RFC 1738 это
А если я укажу строку
Неоднозначность как раз в том, что нельзя выдернуть некий линк ( даже не полный, не являющийся линком по RFC ) из контекста и однозначно сказать домен это или путь.
Я то предполагал мочь обрабатывать всё.
Неоднозначность я имел в виду — по RFC 1738 это
path
, но я то имел в виду домен.А если я укажу строку
index.com
, ресурса такого я не помню, но однако видя .com
лично я воспринимаю ее как домен, а некоторые воспримут его как исполняемый windows файл.Неоднозначность как раз в том, что нельзя выдернуть некий линк ( даже не полный, не являющийся линком по RFC ) из контекста и однозначно сказать домен это или путь.
Я то предполагал мочь обрабатывать всё.
0
Если попытаться подытожить, то реализации поддержки методов для работы с URL в браузерах есть (или планируется) в:
В большинстве случаев этого, наверно, будет достаточно для того, чтобы создать объект с методами и свойствами для удобного разбора и работы с URL. Плюс получается максимальная приближенность к стандартам работы с URL в браузерах.
Вообще достаточно легко найти даже на Github множество либ для работы с URL. Вот к примеру Polymer/URL, тут небольшой список, и множество других.
- URLUtils (MDN, WHATWG URL Living Standard);
- window.URL, window.webkitURL (MDN + MDN);
- HTMLAnchorElement (MDN), HTMLAreaElement (MDN);
- windows.location (MDN);
- Возможно где-то ещё…
В большинстве случаев этого, наверно, будет достаточно для того, чтобы создать объект с методами и свойствами для удобного разбора и работы с URL. Плюс получается максимальная приближенность к стандартам работы с URL в браузерах.
Вообще достаточно легко найти даже на Github множество либ для работы с URL. Вот к примеру Polymer/URL, тут небольшой список, и множество других.
0
Прежде чем выкладывать код в открытый доступ, причесали бы его для приличия, да узнали бы как работает `delete`:
По мимо этого, такие утилитарные вещи, обязательно нужно покрывать тестами, чтобы они не падали от простого URL:
26 warnings
26 warnings
7 Redefinition of 'URL'.
207 The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.
248 Variables should not be deleted.
261 Variables should not be deleted.
274 Variables should not be deleted.
287 Variables should not be deleted.
300 Variables should not be deleted.
313 Variables should not be deleted.
326 Variables should not be deleted.
339 Variables should not be deleted.
352 Variables should not be deleted.
Two undefined variables
196 param
197 param
197 param
244 result
246 result
250 result
257 result
259 result
263 result
270 result
272 result
276 result
283 result
285 result
289 result
296 result
298 result
302 result
309 result
311 result
315 result
322 result
324 result
328 result
335 result
337 result
341 result
348 result
350 result
354 result
По мимо этого, такие утилитарные вещи, обязательно нужно покрывать тестами, чтобы они не падали от простого URL:
var url1 = "//domain.com/path/to.html";
var url2 = "http://domain.com/path/to.html?foo=%";
+11
На вскидку:
Regular Expression for matching Urls as in the RFC
In search of the perfect URL validation regex
RFC 3987
URI.js
Unicode regular expressions
url3.pl
Regular Expression for matching Urls as in the RFC
In search of the perfect URL validation regex
RFC 3987
URI.js
Unicode regular expressions
url3.pl
Правильная регулярка
(?:http://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.
)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)
){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F
\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{
2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{
2}))|[;:@&=])*))?)?)|(?:ftp://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?
:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-
fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-
)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?
:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!
*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'()
,]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:;type=[AIDaid])?)?)|(?:news:(?:
(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;/?:&=])+@(?:(?:(
?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[
a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3})))|(?:[a-zA-Z](
?:[a-zA-Z\d]|[_.+-])*)|\*))|(?:nntp://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[
a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d
])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)/(?:[a-zA-Z](?:[a-zA-Z
\d]|[_.+-])*)(?:/(?:\d+))?)|(?:telnet://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+
!*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'()
,]|(?:%[a-fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a
-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d]
)?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))/?)|(?:gopher://(?:(?:
(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:
(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+
))?)(?:/(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))(?:(?:(?:[
a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))*)(?:%09(?:(?:(?:[a-zA
-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:%09(?:(?:[a-zA-Z\d$
\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))*))?)?)?)?)|(?:wais://(?:(?:(?:
(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:
[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?
)/(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)(?:(?:/(?:(?:[a-zA
-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)/(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(
?:%[a-fA-F\d]{2}))*))|\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]
{2}))|[;:@&=])*))?)|(?:mailto:(?:(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%
[a-fA-F\d]{2}))+))|(?:file://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]
|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:
(?:\d+)(?:\.(?:\d+)){3}))|localhost)?/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'()
,]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(
?:%[a-fA-F\d]{2}))|[?:@&=])*))*))|(?:prospero://(?:(?:(?:(?:(?:[a-zA-Z
\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)
*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)/(?:(?:(?:(?
:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-
zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:(?:;(?:(?:(?:[
a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&])*)=(?:(?:(?:[a-zA-Z\d
$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&])*)))*)|(?:ldap://(?:(?:(?:(?:
(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:
[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?
))?/(?:(?:(?:(?:(?:(?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d])
)|(?:%20))+|(?:OID|oid)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%2
0)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F
\d]{2}))*))(?:(?:(?:%0[Aa])?(?:%20)*)\+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(?
:(?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID
|oid)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])
?(?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)))*)(?:(
?:(?:(?:%0[Aa])?(?:%20)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))(?:(?:(?:(?:(
?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID|o
id)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(
?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*))(?:(?:(?:
%0[Aa])?(?:%20)*)\+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(?:(?:(?:[a-zA-Z\d]|%(
?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID|oid)\.(?:(?:\d+)(?:
\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a
-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)))*))*(?:(?:(?:%0[Aa])?(?:%2
0)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))?)(?:\?(?:(?:(?:(?:[a-zA-Z\d$\-_.+
!*'(),]|(?:%[a-fA-F\d]{2}))+)(?:,(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-f
A-F\d]{2}))+))*)?)(?:\?(?:base|one|sub)(?:\?(?:((?:[a-zA-Z\d$\-_.+!*'(
),;/?:@&=]|(?:%[a-fA-F\d]{2}))+)))?)?)?)|(?:(?:z39\.50[rs])://(?:(?:(?
:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?
:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))
?)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+)(?:\+(?:(?:
[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+))*(?:\?(?:(?:[a-zA-Z\d$\-_
.+!*'(),]|(?:%[a-fA-F\d]{2}))+))?)?(?:;esn=(?:(?:[a-zA-Z\d$\-_.+!*'(),
]|(?:%[a-fA-F\d]{2}))+))?(?:;rs=(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA
-F\d]{2}))+)(?:\+(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+))*)
?))|(?:cid:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@&=
])*))|(?:mid:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@
&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@&=]
)*))?)|(?:vemmi://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z
\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\
.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a
-fA-F\d]{2}))|[/?:@&=])*)(?:(?:;(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a
-fA-F\d]{2}))|[/?:@&])*)=(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d
]{2}))|[/?:@&])*))*))?)|(?:imap://(?:(?:(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+
!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~])+)(?:(?:;[Aa][Uu][Tt][Hh]=(?:\*|(?:(
?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~])+))))?)|(?:(?:;[
Aa][Uu][Tt][Hh]=(?:\*|(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2
}))|[&=~])+)))(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[
&=~])+))?))@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])
?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:
\d+)){3}))(?::(?:\d+))?))/(?:(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:
%[a-fA-F\d]{2}))|[&=~:@/])+)?;[Tt][Yy][Pp][Ee]=(?:[Ll](?:[Ii][Ss][Tt]|
[Ss][Uu][Bb])))|(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))
|[&=~:@/])+)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[
&=~:@/])+))?(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1-
9]\d*)))?)|(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~
:@/])+)(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1-9]\d*
)))?(?:/;[Uu][Ii][Dd]=(?:[1-9]\d*))(?:(?:/;[Ss][Ee][Cc][Tt][Ii][Oo][Nn
]=(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~:@/])+)))?))
)?)|(?:nfs:(?:(?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-
Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:
\.(?:\d+)){3}))(?::(?:\d+))?)(?:(?:/(?:(?:(?:(?:(?:[a-zA-Z\d\$\-_.!~*'
(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d\$\-_.!~*'(),
])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?)))?)|(?:/(?:(?:(?:(?:(?:[a-zA-Z\d
\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d\$\
-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?))|(?:(?:(?:(?:(?:[a-zA-
Z\d\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d
\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?)))
+5
О_О убейте меня сразу… а если ошибся где-то в ней, или поправить чего-нибудь надо ( ._.)
Жаль плюсомета пока нету.
Жаль плюсомета пока нету.
0
Мне вот интересно, это сверхчеловек написал или как-то сгенерировано?
0
param1, param2
Не называйте переменные больше так. Старайтесь давать им осмысленные названия.
Кроме того, в функции update, в моменте сбора query — зачем нужен цикл конкатенации, если можно воспользоваться Array.prototype.join?
0
Вполне осмысленное название…
— его может не прийти вовсе.
— а может прийти строка, тогда имело бы смысл назвать эту переменную
— а для метода
— а если пришла строка в
— а если в
Как посоветуете быть в этом случае?
Что же касается
А у меня:
1) Не массив, а хэш, Т.е. объект, а не массив.( хотя вот если память не изменяет
2) Мне надо склеивать значения с разными сепараторами.
parameter1
, parameter2
, я же не знаю что точно придет в parameter1
. — его может не прийти вовсе.
— а может прийти строка, тогда имело бы смысл назвать эту переменную
value
( ибо если param1
указан, то это сеттер )— а для метода
params
это был бы key
( читаем параметр с указанным ключом )— а если пришла строка в
param2
, тогда param1
стоило бы назвать key
, а param2
— value
— а если в
param1
пришел хэш, то тогда param1
надо назвать hash
Как посоветуете быть в этом случае?
Что же касается
Array.prototype.join
то array.join склеивает весь массив с 1 сепаратором.А у меня:
1) Не массив, а хэш, Т.е. объект, а не массив.( хотя вот если память не изменяет
join
и у хешей есть )2) Мне надо склеивать значения с разными сепараторами.
-2
Мне всегда было интересно, а как решать задаче роутинга с помощью js. И что если сайт динамический и количество роутингов добавляется? Предлагаете конструировать js файл на сервере ?(хотя он может стать просто адских размеров)
0
А что именно за задача и в чём проблема сделать роутинг на js? Если сайт динамический, то делать какой-то фиксированный предгенерённый js-файл для роутинга бессмысленно же. Пусть оно динамически и обрабатывается. Я вот на прошлом месте работы сделал веб-приложение, которое, фактически, состоит из одной html-странички, а все внутренние переходы – на js. В общем виде никакой проблемы нет, насколько я понимаю.
0
У меня сейчас есть такое же приложение, роутинг делается правда в angular точнее в ui-router.
Однако, что будет если количество страниц перевалит за 1000 ?)
Нужно делать какой-то «умный» роутинг, который подгружал бы нужные js постепенно по мере разбирания url
Однако, что будет если количество страниц перевалит за 1000 ?)
Нужно делать какой-то «умный» роутинг, который подгружал бы нужные js постепенно по мере разбирания url
0
С angular работал мало, так что спорить не буду. У меня была такая схема (грубо говоря) – 1 шаблон = 1 страница, адрес страницы совпадает с именем шаблона. Соответственно, абсолютно неважно, сколько страниц, 5 или 5000 – роутинг от этого ни разу не усложняется и не увеличивается.
+1
Это если он совпадает, то да. А что делать если нет совпадения.
0
Советую пост: http://habrahabr.ru/post/200662/
Аккурат роутинг в ангуляе
Аккурат роутинг в ангуляе
0
Там сделано, через routeProvider. Вот вопрос о том, что будет если в нем появится около милиона ссылок? Строк кода будет еще больше, потому что нужно прописать ссылку на темлеит и контроллер.
0
Ну если у вас в приложении сотни и тысячи уникальных страниц – это выглядит, мягко говоря, странно.
Можно к каждой странице прикладывать мини-конфиг, состоящий из пары «адрес»: «имя шаблона», далее при «компиляции» приложения все эти конфиги склеивать в одну табличку роутинга и использовать её.
По возможности – организовать иерархическую структуру страниц, чтоб не надо было сразу подгружать вообще всё.
Ещё раз – я смотрю на проблему с точки зрения «вообще», а не конкретно Angular.
Можно к каждой странице прикладывать мини-конфиг, состоящий из пары «адрес»: «имя шаблона», далее при «компиляции» приложения все эти конфиги склеивать в одну табличку роутинга и использовать её.
По возможности – организовать иерархическую структуру страниц, чтоб не надо было сразу подгружать вообще всё.
Ещё раз – я смотрю на проблему с точки зрения «вообще», а не конкретно Angular.
+1
как вариант передавать в урле либо ?template=xxx, либо #template_name
если оны не заняты под другие нужды
если оны не заняты под другие нужды
-1
Sign up to leave a comment.
URL.js или дружим JavaScript с обработкой ссылок