Jeśli potrafimy bez ściągawki wykonać zwijanie i rozwijanie akapitu z rozszerzona treścią, możemy być z siebie dumni. Oznacza to, że zrozumieliśmy istotę onclick i zmiany właściwości stylów danych tagów w dokumencie HTML. Umiemy też pobrać zawartość każdego znacznika HTML. W tym odcinku nauczymy się uzyskiwać efekty, które już znamy, lecz trochę innymi sposobami.
Powtórka z rozrywki
Zacznijmy od tego, co już wiemy. Mamy wiec
dokument HTML (listing 1). Tym razem zmieni się
w nim jeden element, aczkolwiek nie powinien
sprawić problemów.
Strona z newsem
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque metus eros, rutrum at, hendrerit nec, posuereac. wiecej
Vivamus pretium fringilla metus. Praesent a enim eu metus scelerisque tincidunt. In auctor lorem et leo.
TrochÄ teorii
KlikajÄ
c wiÄcej lub schowaj skrypt wie jaki paragraf
pokazaÄ bÄ
dĹş ukryÄ. Zapisane jest to
w funkcji {stala}PokazAkapit{/stala}:
var akapit = document.getElementById(\'more\');
Dowiadujemy siÄ z niego, ze bÄdziemy operowaÄ
na akapicie o id=\”more\”, na co wskazuje uĹźycie
w {stala}document.getElementById();{/stala} argumentu \”more\”.
Tym sposobem jedna funkcja, czyli kilkanaĹcie linijek
kodu, odpowiada za zwiniecie tylko jednego akapitu.
MoĹźna nadaÄ jej wiÄkszÄ
uniwersalnoĹÄ, by
zwijaĹ siÄ i rozwijaĹ dowolny akapit o okreĹlonym id,
jaki podamy przy wywoĹaniu zdarzenia onclick.
Aby to zrealizowaÄ, nasza funkcja musi wiedzieÄ,
ktĂłry akapit ma zwinÄ
Ä i rozwinÄ
Ä.
Trzeba
wiec jej podaÄ id paragrafu
{html}
{/html}, jaki ma siÄ
pokazaÄ lub schowaÄ po
klikniÄciu linka za to odpowiedzialnego.
Podobna funkcjonalnoĹÄ
moĹźna uzyskaÄ poprzez
przekazanie wspomnianego
identyfikatora akapitu jako
argumentu funkcji. Przypomnijmy
wiec, kiedy wywoĹujemy
{stala}PokazAkapit{/stala}:
wiecej
A dokĹadniej w tym miejscu:
onclick=\"PokazAkapit();\"
Dodanie takiego kawaĹka kodu, jako atrybutu jakiegoĹ
tagu, powoduje wywoĹanie funkcji {stala}PokazAkapit{/stala}
po klikniÄciu wĹaĹnie tego tagu. W aktualnej
postaci funkcja {stala}PokazAkapit{/stala} sama decyduje, co pokazaÄ.
W koĹcu rozkazaliĹmy jej poprzez wpisanie
kilku linijek zwijaÄ i rozwijaÄ akapit o id=\”more\”.
Dodanie nowego akapitu
Gdy chcemy wybraÄ, ktĂłry akapit rozwinÄ
Ä, dodajemy
kolejny paragraf do naszego dokumentu:
Vivamus pretium fringilla metus.Praesent a enim eu metus scelerisque tincidunt. In auctor lorem et leo.
Jest on rĂłwnieĹź domyĹlnie schowany (display: none;), a jego id jest rĂłwne more_second. Dokument, po tej operacji, wyglÄ da jak na listingu 2.
Strona z newsem
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque metus eros, rutrum at, hendrerit nec, posuereac. wiecej
Vivamus pretium fringilla metus. Praesent a enim eu metus scelerisque tincidunt. In auctor lorem et leo.
Vivamus pretium fringilla metus. Praesent a enim eu metus scelerisque tincidunt. In auctor lorem et leo.
Funkcje i argumenty
Naturalnie, skrypt nadal rozwija pierwszy schowany paragraf. Wyedytujemy
wiec link wiÄcej, by jako argument funkcji {stala}PokazAkapit{/stala}, wstawiony
zostaĹ identyfikator paragrafu, ktĂłry chcemy rozwinÄ
Ä:
wiecej
AbyĹmy lepiej zrozumieli to, co siÄ zmieniĹo, wyróşnimy kawaĹek kodu:
onclick=\"PokazAkapit(\'more_second\');\"
Niestety, dodanie powyĹźszej treĹci nic nam nie daĹo. Skrypt nie bÄdzie
dziaĹaĹ, a w najlepszym wypadku ujrzymy bĹÄ
d w przeglÄ
darce.
Funkcja {stala}PokazAkapit{/stala} zapisana jest w taki sposĂłb:
function PokazAkapit()
{
var akapit = document.getElementById(\'more\');
var odnosnik = document.getElementById(\'link\');
var view = akapit.style.display;
if (view == \"block\")
{
odnosnik.innerHTML = \"wiecej\";
akapit.style.display = \"none\";
}
if (view == \"none\")
{
odnosnik.innerHTML = \"schowaj\";
akapit.style.display = \"block\";
}
}
i, jak sami widzimy, nie zawiera nic pomiÄdzy nawiasami: {stala}function PokazAkapit(){/stala}.
Z drugiej strony, w naszym dokumencie mamy zdefiniowane
wywoĹanie {stala}PokazAkapit{/stala} z wartoĹciÄ
w nawiasach (argumentem):
onclick=\"PokazAkapit(\'more_second\');\"
Musimy w tej sytuacji daÄ moĹźliwoĹÄ funkcji {stala}PokazAkapit{/stala} pobierania
wartoĹci argumentu przy jej wywoĹaniu. Oto ona:
function PokazAkapit(id_paragrafu)
{
W ten sposĂłb moĹźemy Ĺatwo odwoĹaÄ siÄ do wartoĹci id przekazanej
w onclick. W tym przypadku jest ona rĂłwna {stala}more_second{/stala}. Aby
upewniÄ siÄ, ze wszystko dziaĹa, niech funkcja {stala}PokazAkapit{/stala} ma nastÄpujÄ
cÄ
postaÄ:
function PokazAkapit(id_paragrafu)
{
alert(id_paragrafu);
var akapit = document.getElementById(\'more\');
var odnosnik = document.getElementById(\'link\');
var view = akapit.style.display;
if (view == \"block\")
{
odnosnik.innerHTML = \"wiecej\";
akapit.style.display = \"none\";
}
if (view == \"none\")
{
odnosnik.innerHTML = \"schowaj\";
akapit.style.display = \"block\";
}
}
DefiniujÄ
c w ten sposĂłb funkcjÄ Costam okreĹlamy, Ĺźe aby wywoĹaÄ
jÄ
(np. w onclick), naleĹźy podaÄ teĹź argument.
PrzykĹadowe wywoĹanie tej funkcji wyglÄ
daĹoby nastÄpujÄ
co:
{html}onclick=\”Costam(\’lalala\’);\” {/html}
DziÄki temu wewnÄ
trz funkcji (pomiÄdzy klamrami) mamy do dyspozycji
zmiennÄ
o nazwie argument, ktĂłra ma wartoĹÄ lalala. To tak,
jakbyĹmy we wnÄtrzu tej samej funkcji napisali:
{html}var argument = \”lalala\”;{/html}
DodaliĹmy to:
alert(id_paragrafu);
PowyĹźszy kod byĹ dodany, by wyĹwietliÄ w wyskakujÄ
cym okienku
to, co jest przekazywane pod postaciÄ
zmiennej id_paragrafu. Jak widzimy,
pokaĹźe siÄ more_second.
Teraz, kiedy pod postaciÄ
zmiennej id_paragrafu mamy dowolny
identyfikator, moĹźemy pobraÄ odnoĹnik do niego poprzez funkcje dokument.
{stala}getElementById();{/stala}. Musimy tylko podaÄ jej argument, jakim bÄdzie
zmienna id_paragrafu. Ta z kolei ma wartoĹÄ jakiegoĹ id, wiec moĹźemy
bez problemĂłw skorzystaÄ z {stala}document.getElementById(){/stala}. Usuwamy
poprzednio dodany alert(); i dodajemy to, co nas interesuje:
var akapit = document.getElementById(id_paragrafu);
W tym przypadku nie otaczamy sĹĂłwka id_paragrafu apostrofami
czy tez cudzysĹowami, poniewaĹź jest to zabronione i zakoĹczyĹoby siÄ
bĹÄdem.
function PokazAkapit(id_paragrafu)
{
var akapit = document.getElementById(id_paragrafu);
var odnosnik = document.getElementById(\'link\');
var view = akapit.style.display;
if (view == \"block\")
{
odnosnik.innerHTML = \"wiecej\";
akapit.style.display = \"none\";
}
if (view == \"none\")
{
odnosnik.innerHTML = \"schowaj\";
akapit.style.display = \"block\";
}
}
Dokument wyglÄ da natomiast tak jak na listingu 3.
Strona z newsem
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque metus eros, rutrum at, hendrerit nec, posuereac.
wiecej
Vivamus pretium fringilla metus.Praesent a enim eu metus scelerisque tincidunt. In auctor lorem etleo.
Vivamus pretium fringilla metus. Praesent a enim eu metus scelerisque tincidunt. In auctor lorem et leo.
W ten sposĂłb moĹźemy uĹźyÄ naszej funkcji na paragrafie o id=\”more_
second\”. Podstawimy w:
onclick=\"PokazAkapit(\'more_second\');\"
inne wartoĹci, oczywiĹcie po uprzednim dodaniu odpowiednich tagĂłw
z identyfikatorami, by przekonaÄ siÄ o potÄdze zastosowanego kodu.
Popatrzmy na jeszcze jeden dokument HTML prezentujÄ
cy istotÄ
problemu – listing 4.
Strona z innym przykĹadem argumentĂłw funkcji
Sprawa jest prosta, wywoĹujemy w {stala}onclick=\”Pokaz(\’To jest tekst,
ktĂłry wyĹwietli siÄ w okienku\’);\”{/stala} funkcje {stala}Pokaz{/stala}, dla ktĂłrej przygotowaliĹmy
jeden argument pod postaciÄ
zdania To jest tekst, ktĂłry wyĹwietli
siÄ w okienku. Po klikniÄciu linka show me it! ukaĹźe siÄ okienko wĹaĹnie
z tym zdaniem.
Widzimy wiec, ze to, co przekaĹźemy do funkcji, jest
w niej dostÄpne pod postaciÄ
zmiennej. W tym przypadku nazwaliĹmy
ja {stala}costam_costam{/stala}. SprĂłbujmy zmieniaÄ argument w onclick, by przekonaÄ
siÄ, ze to naprawdÄ dziaĹa!