Autor Zpráva
emissary
Profil
var body = document.getElementsByTagName("body") [0];



Čo znamená tá nula na konci [0]?

ďakujem

Moderátor Joker: Titulek „Začiatočnícka otázka“ nevystihuje podstatu dotazu. Příště zkus prosím vymyslet lepší.
Radek9
Profil
emissary:
Metoda getElementsByTagName vrací kolekci objektů. Body bývá na stránce většinou jednou, takže ti stačí vzít si jen nultý prvek. Osobně bych ale radši použil document.body.
Joker
Profil
emissary:
Případně další informace o práci s poli zde.
emissary
Profil
Hmm... ak som to teda správne pochopil, tak document.getElementsByTagName("body") [0]; je ako keby:

var pole = [];
pole[0] = 'zelena';

var xxx = pole[0];       ==     var body = document.getElementsByTagName("body") [0];

Len nechápem celkom tomu, že ak je body na stránke len jedno, tak prečo za zaťažovať tou [0].

Bude to tým, že aj keď bude obsahovať document.getElementsByTagName() len jedno pole. Teda document.getElementsByTagName[0] a ak ho priradím do premennej var body tak mi z var body vznikne tiež pole, ktoré bude síce obsahovať len jeden prvok? A ak to spravím tak, že do var body priradím document.getElementsByTagName[0], tak vtedy mi vznikne z var body len premenná typu "string"?
Joker
Profil
emissary:
Len nechápem celkom tomu, že ak je body na stránke len jedno, tak prečo za zaťažovať tou [0].
Už to vysvětloval Radek9. Zatímco třeba document.getElementById vrací jeden prvek, metoda document.getElementsByTagName vrací kolekci (~ pole). Proto je i v jejím názvu množné číslo (elements).
S tím body je to trochu matoucí, ale vezměme document.getElementsByTagName("div"). To vrátí všechny prvky <div> na stránce.
document.getElementsByTagName("div")[0]; //první <div> na stránce
document.getElementsByTagName("div")[1]; //druhý <div> na stránce
document.getElementsByTagName("div")[2]; //třetí <div> na stránce
…
A ta metoda vrací kolekci vždycky, i když na stránce bude jen jeden <div>, vrátí kolekci s jedním prvkem. Ono by se s ní taky blbě pracovalo, kdyby vracela pokaždé něco jiného.
S prvkem <body> je to to samé, ta metoda bude fungovat i kdyby na stránce bylo víc prvků <body>, ale obvykle máme jen jeden, takže můžeme rovnou vzít první (a obvykle i poslední) <body> na stránce document.getElementsByTagName("body")[0].
Str4wberry
Profil
(Ehm, ono může být na HTML stránce jiný počet než právě jeden element <body>?)
Joker
Profil
Str4wberry:
Já píšu jen „na stránce“, možná lepší termín by byl „v dokumentu“. Nicméně i stránka může být v XHTML a může tam být prvků <body> kolik si usmyslím.

Každopádně co jsem chtěl říct je, že metoda document.getElementsByTagName neřeší, kolik těch prvků na stránce dovoluje nějaká specifikace, prostě vždycky vrátí kolekci.
emissary
Profil
Joker

Ale ja chápem tomu tvojmu vysvetleniu. Len nechápem tomu, že ak mám jeden prvok body, prečo sa budem zaťažovať tou nulou. Chápem tomu, že pri prvkoch ako je div je to úplne normálne.

Ja som sa pýtal, že ak:

1. var div = document.getElementsByTagName("div") [0];

tak z premennej div vynikne iba obyčajná premenná. Teda premenná dátoveho typu string. Áno - Nie?

2.1 Ak do premennej chcem zapísať pole, ktoré bude obsahovať LEN jeden prvok a ja ho nešpecifikujem tou [0], takto:

var body = document.getElementsByTagName("body");

tak z premennej body mi vznikne pole? Toto pole bude obsahovať jeden prvok. Teda odkazovať naň sa budem body[0]? Áno - Nie?

2.2 Ak do premennej budem chcieť zapísať PRVOK pola, takto:

var body = document.getElementsByTagName("body") [0];

tak z premennej body vznikne iba obyčajná premenná dátového typu string? Áno - Nie?

Moje odpovede:
1. - Áno;
2.1 - Áno;
2.2 - Áno;

3. Teda jediný osoh z kódu (V PRÍPADE, ŽE STRÁNKA OBSAHUJE LEN JEDEN PRVOK BODY):

 var body = document.getElementsByTagName("body") [0];

oproti

var body = document.getElementsByTagName("body");

je ten, že z premennej body mi nevznikne POLE! Áno - Nie?

Moja odpoveď:
3. - Áno;
Joker
Profil
emissary:
1. „tak z premennej div vynikne iba obyčajná premenná. Teda premenná dátoveho typu string. Áno - Nie?
Ne.
Ne string ale objekt příslušného HTML prvku (v případě prvku <div> to bude „object HTMLDivElement“)

2.1: Ano
2.2: To samé jako 1, nebude to string, ale objekt.

3. Ano

Kdybyste napsal:
var body = document.getElementsByTagName("body");
musel by pak kód pracující s tím prvkem používat body[0].
Když máte
var body = document.getElementsByTagName("body")[0];
máte tam rovnou reprezentaci toho prvku <body>, čili místo body[0] píšete jen body.
Str4wberry
Profil
Ano, jen mi přišlo vhodné doplnit, že kód:
<body>1</body>
<body>2</body>
<script>alert(document.getElementsByTagName("body")[0].innerHTML);</script>
nemusí v HTML fungovat dle možného očekávání.
emissary
Profil
Joker:
V podstate som to pochopil správne. Ďakujem za príspevky.


Ďakujem všetkým za príspevky, túto tému môžme uzavrieť.
peta
Profil
"prečo sa budem zaťažovať tou nulou."
Protoze tak je udelana ta funkce, ze vraci pole. Muzes si udelat funkcni findFirstTag, ktera ti najde prvni tag nebo null.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0