W poprzednim odcinku po kilku modyfikacjach otrzymaliśmy skrypt, który powoduje zwinięcie bądź rozwinięcie akapitu z rozszerzoną treścią wiadomości. Uzupełnijmy go zmianą wartości linka Więcej – kiedy akapit będzie schowany, będzie ona równa „więcej”, w przeciwnym razie przybierze wartość „schowaj”.Dynamiczne elementy HTML
W poprzednim odcinku po kilku modyfikacjach otrzymaliśmy skrypt, który powoduje zwinięcie bądź rozwinięcie akapitu z rozszerzoną treścią wiadomości. Uzupełnijmy go zmianą wartości linka Więcej – kiedy akapit będzie schowany, będzie ona równa \”więcej\”, w przeciwnym razie przybierze wartość \”schowaj\”.
Do tej pory poznaliśmy kilka niezwykle pożytecznych elementów języka JavaScript.:
{stala}document.getElementById(id);{/stala} – pozwala dostać się do każdego tagu o podanym {stala}id{/stala} w dokumencie HTML. Na przykład:
document.getElementById(\'newsy\');
Poprawnym zapisem jest również:
document.getElementById(\"newsy\");
W miejsce {stala}id{/stala} możemy tez podać zmienna o wcześniej przypisanej wartości:
var jakies_id = \"more\";
var akapit = document.getElementById (jakies_id);
{stala}onclick();{/stala} – funkcja dająca znać przeglądarce, że kliknęliśmy dany tag HTML, któremu wcześniej nadaliśmy atrybut:
onclick=\"tutaj jakis kod JS\"
Fachowo funkcje typu {stala}onclick{/stala} nazywamy zdarzeniem. Jest jeszcze kilka podobnych funkcji obsługujących określone zachowania użytkownika, np. naprowadzenie wskaźnika myszy na jakiś element. Wykorzystamy je w kolejnych przykładach, prezentujących miedzy innymi rozwijane menu. Przykłady {stala}onclick{/stala} dla przypomnienia wiadomości:
lub
i wiele więcej…
Umieszczanie {stala}onclick{/stala} jako atrybut tagu jest niewskazane przez W3C – nie jest strict dla dokumentów XHTML. W następnych częściach dowiemy się, jak rozwiązać ten problem. |
{stala}alert();{/stala} – wbudowana funkcja języka Java-Script, która pozwala wyświetlić okienko z wpisaną treścią jako argument. W połączeniu z {stala}onclick{/stala} można wykorzystać ją następująco (rys. 1):
klik
Wróćmy do naszego newsa. Tym razem zajmiemy się linkiem:
więcej
który wygląda tak jak na listingu 1.
Strona z newsem
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque metus eros, rutrum at, hendrerit nec, posuere ac.wiÄcej
Vivamus pretium fringilla metus. Praesent a enim eu metus scelerisque tincidunt. In auctor lorem et leo.
Ustalamy plan dziaĹania
PostanowiliĹmy, Ĺźe po klikniÄciu linka wiÄcej zmieni siÄ jego wartoĹÄ na {stala}zwiĹ/schowaj{/stala}. ZaĹóşmy, Ĺźe w tym wypadku wybieramy jedno sĹĂłwko, np. {stala}schowaj{/stala}.
EdytowaliĹmy juĹź wartoĹci w JavaScripcie, a konkretnie wĹaĹciwoĹci stylĂłw paragrafu o {stala}id=\”more\”{/stala}. Zastosujemy wiec prosta analogie:
- nadamy linkowi {stala}id=\”link\”{/stala},
- pobierzemy do zmiennej o nazwie {stala}odnosnik{/stala} odwoĹanie do naszego linka {stala}wiÄcej{/stala} (analogicznie robiliĹmy to ze zmiennÄ {stala}akapit{/stala}, do ktĂłrej pobieraliĹmy odwoĹanie do paragrafu z rozszerzona treĹciÄ newsa),
- pobierzemy zawartoĹÄ (wszystko pomiÄdzy tagami) linka (nowoĹÄ w naszym kursie),
- zmienimy jÄ w zaleĹźnoĹci od tego, kiedy akapit {stala}id=\”more\”{/stala} bÄdzie miaĹ {stala}display: none{/stala} bÄ dĹş {stala}display: block{/stala}.
Krok po kroku…
Dokonajmy wiÄc poprawek w naszym dokumencie wedĹug powyĹźszego planu. Na poczÄ tek dodajemy identyfikator {stala}id=\”link\”{/stala}:
wiÄcej
NastÄpnie pora wzbogaciÄ funkcje {stala}PokazAkapit{/stala} o nowa zmiennÄ , ktĂłrej nazwa to {stala}odnosnik{/stala}. WywoĹywana jest ona po klikniÄciu linka {stala}wiÄcej{/stala} i przeglÄ darka wykonuje jej (funkcji) poszczegĂłlne instrukcje od gĂłry do doĹu.
var odnosnik = document.getElementById (\'link\');
Po dodaniu tej linijki funkcja wyglÄ da tak:
function PokazAkapit()
{
var akapit = document.getElementById (\'more\');
var odnosnik = document.getElementBy Id(\'link\');
var view = akapit.style.display;
if (view == \"block\")
{
akapit.style.display = \"none\";
}
if (view == \"none\")
{
akapit.style.display = \"block\";
}
}
Mamy juĹź zdefiniowane trzy zmienne. Dwie pierwsze sÄ odnoĹnikami do konkretnych tagĂłw naszego dokumentu HTML, a trzecia, {stala}view{/stala}, przechowuje wartoĹÄ {stala}display{/stala} stylĂłw paragrafu, do ktĂłrego odwoĹujemy siÄ uĹźywajÄ c zmiennej {stala}akapit{/stala}.
Pobieranie zawartoĹci tagĂłw HTML
Pora na punkt drugi, czyli pobranie zawartoĹci naszego linka. Interesuje nas wszystko, co jest pomiÄdzy tagami {stala}{/stala}. Zastosujemy tutaj maĹÄ analogiÄ. Tak jak {stala}style{/stala} mogliĹmy wyciÄ gnÄ Ä stosujÄ c {stala}style.jakas_wlasciwosc{/stala}, tak wartoĹÄ danego tagu moĹźna otrzymaÄ stosujÄ c {stala}innerHTML{/stala}. Popatrzmy:
function PokazAkapit()
{
var akapit = document.getElementById (\'more\');
var odnosnik = document.getElement ById(\'link\');
alert(odnosnik.innerHTML);
var view = akapit.style.display;
if (view == \"block\")
{
akapit.style.display = \"none\";
}
if (view == \"none\")
{
akapit.style.display = \"block\";
}
}
DodaliĹmy jednÄ linijkÄ:
alert(odnosnik.innerHTML);
DziÄki niej oprĂłcz schowania i pokazania akapitu z rozszerzonÄ treĹciÄ pokazuje siÄ rĂłwnieĹź okienko o treĹci {stala}wiÄcej{/stala}.
innerHTML to wĹaĹciwoĹÄ kaĹźdego tagu HTML, ktĂłra zawiera wszystko, co jest pomiÄdzy nim (w tym inne tagi). Aby siÄ do niej dostaÄ, naleĹźy najpierw pobraÄ odnoĹnik do danego tagu. Na przykĹad: {html}var odnosnik_do_akapitu = document.getElementById(\’akies_id\’);{/html} PowyĹźszy kod wyĹwietli okienko z zawartoĹciÄ jakiegoĹ tagu {html} zawartosc {/html} o {html}id=\”jakies_id\”{/html}, na przykĹad: {html} zawartosc {/html} |
Jak widaÄ (rys. 2), {stala}innerHTML{/stala} rzeczywiĹcie przechowuje zawartoĹÄ tagu:
< href=\"#\" onclick=\"PokazAkapit();\" id=\"link\">.
Nie interesuje nas jednak okienko alert, ale zmiana zawartoĹci linka. Usuwamy wiÄc kod z odwoĹaniem do {stala}alert();{/stala}, traktujÄ c go jako ciekawostkÄ.
Zmiana zawartoĹci tagĂłw HTML
Jak wiadomo, nasz link pozwalajÄ cy wyĹwietliÄ pozostaĹÄ czeĹÄ wiadomoĹci, musi siÄ zmieniaÄ odpowiednio do ustawionego {stala}display{/stala} dla akapitu {stala}id=\”more\”{/stala}. JeĹli ten bÄdzie ustawiony na {stala}block{/stala}, link przybierze postaÄ {stala}\”wiÄcej\”{/stala}, jeĹli na {stala}none{/stala} – {stala}\”schowaj\”{/stala}. Te teoretyczna sytuacje mamy juĹź w kodzie z poprzedniego odcinka:
var view = akapit.style.display;
if (view == \"block\")
{
akapit.style.display = \"none\";
}
if (view == \"none\")
{
akapit.style.display = \"block\";
}
Musimy teraz dodaÄ moĹźliwoĹÄ zmiany wartoĹci naszego linka.
var view = akapit.style.display;
if (view == \"block\")
{
odnosnik.innerHTML = \"wiÄcej\";
akapit.style.display = \"none\";
}
if (view == \"none\")
{
odnosnik.innerHTML = \"schowaj\";
akapit.style.display = \"block\";
}
Dwie linijki, ktĂłre dodaliĹmy, zaĹatwiajÄ nam sprawÄ. SÄ to kolejno: {stala}odnosnik.innerHTML = \”wiÄcej\”{/stala}; oraz {stala}odnosnik.innerHTML = \”schowaj\”;{/stala}.
MoĹźna to przetĹumaczyÄ w nastÄpujÄ cy sposĂłb: jeĹli ukrywamy akapit ({stala}akapit.style.display = \”none\”;{/stala}), link przybiera postaÄ wiÄcej ({stala}odnosnik. innerHTML = \”wiÄcej\”;{/stala}). JeĹli natomiast pokazujemy akapit ({stala}akapit.style.display = \”block\”;{/stala}), po nastÄpnym klikniÄciu on zniknie, wiÄc link przybiera postaÄ {stala}\”schowaj\”{/stala} ({stala}odnosnik. innerHTML = \”schowaj\”;{/stala}). Oznaczamy tym samym, Ĺźe nastÄpne klikniecie bÄdzie \”chowaĹo\” akapit.
Finisz
Teraz nasza funkcja {stala}PokazAkapit{/stala}, ktĂłra wywoĹujemy po klikniÄciu linka {stala}wiÄcej{/stala}, wyglÄ da tak:
function PokazAkapit()
{
var akapit = document.getElementById(\'more\');
var odnosnik = document.getElement ById(\'link\');
var view = akapit.style.display;
if (view == \"block\")
{
odnosnik.innerHTML = \"wiÄcej\";
akapit.style.display = \"none\";
}
if (view == \"none\")
{
odnosnik.innerHTML = \"schowaj\";
akapit.style.display = \"block\";
}
}
A dokument HTML jak na listingu 2 (rys. 3).
Strona z newsem
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque metus eros, rutrum at, hendrerit nec, posuere ac.wiÄcej
Vivamus pretium fringilla metus. Praesent a enim eu metus scelerisque tincidunt. In auctor lorem et leo.
Mechanizm dziaĹa jak trzeba, a dziÄki {stala}innerHTML{/stala} moĹźemy wyĹwietliÄ zawartoĹÄ kaĹźdego tagu HTML o okreĹlonym {stala}id{/stala}. Na razie wyglÄ da na to, Ĺźe jesteĹmy uzaleĹźnieni od identyfikatorĂłw, aczkolwiek nie jest to jedyny sposĂłb dostania siÄ do elementĂłw dokumentu HTML.