Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem JavaScript - Jak zobrazit obsah divu podle zadaného parametru v URL

Zdravím, může mě prosím někdo poradit jak zobrazit určitý div podle parametru v zadané url?

<ul>
<li><a href="#1">1</a></li>
<li><a href="#2">2</a></li>
<li><a href="#3">3</a></li>
</ul>

<article>
<div id="0">Index</div>
<div id="1">Page 1</div>
<div id="2">Page 2</div>
<div id="3">Page 3</div>
<div id="999">Error</div>
</article>

Příklad
po zadání url http://example.foo/#1 by se zobrazil obsah div-u s ID 1
po zadání url (bez parametru) http://example.foo/ by se zobrazil obsah div-u s ID 0
pokud by id neexistovalo tak zobrazit obsah div-u 999

Předem moc děkuji za pomoc.

Předmět Autor Datum
Co přesně myslíš tím zobrazit? Že to tam má skočit, nebo že má být na ten stránce jenom ten div a os…
Wikan 16.02.2019 15:57
Wikan
Ano, že má být na stránce jenom ten div a ostatní mají být skryté.
Dědekk 16.02.2019 16:19
Dědekk
Ten parametr budeš mít v location.hash. Pak všem nastavíš display na "none" a tomu konkrétnímu na "b…
Wikan 16.02.2019 16:32
Wikan
Díky, aspoň vím co mám hledat.
Dědekk 16.02.2019 20:30
Dědekk
Skrytí obsahu JavaScriptem
Pavel 16.02.2019 16:07
Pavel
Však to máš úplne jednoduché. Všetky divy budú default skryté. A do stránky dáš len jednoduchý skrip…
pozorovateľ 16.02.2019 16:10
pozorovateľ
Ano, a přesně to neumím udělat.
Dědekk 16.02.2019 16:20
Dědekk
Chlape, ale ty z toho nevieš asi úplne nič. To potom nechceš poradiť ale spraviť. Už neviem ako viac…
pozorovateľ 16.02.2019 16:48
pozorovateľ
Najjednoduchší spôsob je využiť (resp. zneužiť) pseudotriedu :target v štýloch. Nevýhodou je, že nev…
moose 16.02.2019 21:08
moose
Díky moc! Jdu to pořádně nastudovat...... poslední
Dědekk 16.02.2019 21:38
Dědekk

Najjednoduchší spôsob je využiť (resp. zneužiť) pseudotriedu :target v štýloch. Nevýhodou je, že nevieš ošetriť prípad, keď :target nie je nastavený. Ďalšou nevýhodou je, že v prípade, že prehliadač nepodporuje :target, používateľ neuvidí nič. Pri tomto postupe stačí na začiatku nastaviť štýly:

<style>
	article>div { display: none; }
	article>div:target { display: block; }
</style>

Druhá (lepšia) možnosť je, postarať sa o to JavaScriptom. V prípade, že nie je JavaScript povolený, používateľ uvidí všetko. Môžeš použiť :target na zvýraznenie zvolenej časti (toto je to, na čo bol :target navrhnutý). Pre tento postup treba na začiatku nastaviť štýly, ktoré budú použité v JavaScripte:

<style>
	.js article>div { display: none; }
	.js article>div.show { display: block; }
</style>

Na začiatku nastavíš rootovemu elementu triedu js, aby si vedel v CSS pravidlách rozlíšiť prípady, kedy je JavaScript zapnutý alebo vypnutý. Toto je dobré robiť inline (t.j. nedávať do externého súboru), aby sa stránka renderovala hneď od začiatku podľa toho, či klient JavaScript podporuje. Predvolene predpokladáš, že JavaScript je vypnutý a JavaScriptom nastavíš indikátor, že je zapnutý:

<script>document.documentElement.classList.add('js')<script>

Na konci stránky potom zavoláš JavaScript. Ten sa musí vykonať až keď sú targetované elementy nahrané, preto je najlepšie to dať na koniec. Ak chceš, môžeš samozrejme použiť ondocumentready a umiestniť to na začiatok. Skript bude vyzerať nejako takto:

<script>
let shownTarget = null;
function showTarget() {
	if (shownTarget) {
		shownTarget.classList.remove('show');
	}
	shownTarget = document.getElementById(location.hash.substr(1));
	if (shownTarget) {
		shownTarget.classList.add('show');
	}
}
showTarget();
window.onhashchange = showTarget;
</script>

Štýly a skripty môžeš samozrejme umiestniť do externých súborov a v head sa na ne odkazovať (pri JavaScripte potom môžeš použiť atribút defer, prípadne async s ondocumentready).

Edit:

pokud by id neexistovalo tak zobrazit obsah div-u 999

Na toto treba upraviť riadok, ktorý vyberá zobrazovaný element:

shownTarget = document.getElementById(location.hash.substr(1)) || document.getElementById('999');

Edit2:

po zadání url (bez parametru) http://example.foo/ by se zobrazil obsah div-u s ID 0

Na toto treba upraviť riadok, ktorý vyberá zobrazovaný element:

shownTarget = document.getElementById(location.hash ? location.hash.substr(1) : '0') || document.getElementById('999');

Zpět do poradny Odpovědět na původní otázku Nahoru