Autor | Zpráva | ||
---|---|---|---|
preca2 Profil * |
#1 · Zasláno: 28. 2. 2014, 10:51:20
Zdravim,
mám následující HTML a JS kód. Atribut href odkazu je dynamický (mění se v závislosti na co uživatel kliká), proto sem do něj vložil znaky, který normálně používam pro šablony - dvojitý chlupatý závorky. Při načtení stránky chci přečíst hodnotu href u, uložit sí jí a pak jí na stránce používat jako šablonu pro finální odkazy.
Problém je v tom, že prohlížeče (alespoň poslední verze FF a Chromia) hodnotu částečně escapují (encodují?) (pouze cestu, ne parametry (query string)). Když si hodnotu vytáhnu pomocí čistýho JS document.getElementsByTagName("a")[0].href file:///%7B%7Ba%7D%7D?param={{b}} $("a").attr("href") /{{a}}?param={{b}} Element.getAttribute . Ta je sice zapovězena místním FAQ, ale v tomhle případě mi myslím nevadí, že IE vrací celou cestu, takže použiju jí.
Dokáže mi někdo vysvětlit, jakym způsobem (podle jakého klíče) prohlížeče escapují atribut href? Proč escapujou jen cestu, ale už ne parametry? Případně navrhnout lepší řešení? Řešení, který sem zavrhnul: - mít cestu uloženou někde v JS - chtěl bych mít cestu přímo u toho odkazu, aby bylo v HTML vidět, kam vede. - mít cestu na dvou místech (HTML a JS) - pravděpodobně bych jí na jednom z míst zapomněl později upravit, kdyby se cesta změnila a mohlo by to pro někoho (třeba mé pozdější já) být matoucí Dík |
||
Radek9 Profil |
preca2:
„Koukal sem, že jQ interně používá Element.getAttribute “
To je proto, že si bereš atribut ( attr ). Pokud chceš vlastnost, použij prop .
„jakym způsobem (podle jakého klíče) prohlížeče escapují atribut href?“ Pravděpodobně encodeURI .
To escapování je prostě nutné, u adres holt nejsou povolené všechny znaky. ;-) |
||
_es Profil |
#3 · Zasláno: 28. 2. 2014, 11:00:28
preca2:
Chybou je, že zápis atribútu href nie je správne „zakódovaný“ - to by mohlo spôsobovať problémy. Na „odkódovanie“ adresy je v JS funkcia decodeURI.
|
||
preca2 Profil * |
#4 · Zasláno: 28. 2. 2014, 11:12:44
Radek9:
„Pokud chceš vlastnost, použij prop.“ prop vrací také file:///%7B%7Ba%7D%7D?param={{b}}
takže v tomhle mi jQ nepomůže „Pravděpodobně encodeURI.“ encodeURI("file:///{{a}}?param={{b}}") => "file:///%7B%7Ba%7D%7D?param=%7B%7Bb%7D%7D" „To escapování je prostě nutné, u adres holt nejsou povolené všechny znaky. ;-)“ Tohle chápu, ale proč escapujou pouze cestu a ne parametry? Proč dostanu file:///%7B%7Ba%7D%7D?param={{b}} file:///%7B%7Ba%7D%7D?param=%7B%7Bb%7D%7D _es: decodeURI("file:///%7B%7Ba%7D%7D?param={{b}}") => "file:///{{a}}?param={{b}}" Jen by mě zajímalo, proč prohlížeče tak zvlásštně kódujou tu hodnotu. Je to chyba, vlastnost? Jestli je to vlastnost, jaký rozhodnutí za ní stojí? |
||
_es Profil |
preca2:
„proč escapujou pouze cestu a ne parametry?“...„Jen by mě zajímalo, proč prohlížeče tak zvlásštně kódujou tu hodnotu. Je to chyba, vlastnost? Jestli je to vlastnost, jaký rozhodnutí za ní stojí?“ URL kódování – Wikipedie |
||
Časová prodleva: 11 let
|
0