NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

Diskuze – Lekce 18 - Manipulace s DOM v JavaScriptu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Odpovídá na Jirka
Michal Žůrek - misaz:22.11.2016 12:24

chyba může být na spoustě míst, zmáčkni F12 a podívej se jestli v konzoli není nějaký error. Předpokládám, že se snažíš načíst element P když ještě není načtený. Popis najdeš v některém z úvodních dílů včetně odpovědi na otázku, kde je nejlepší mít umístěn element script.

 
Odpovědět
22.11.2016 12:24
Avatar
Jirka
Člen
Avatar
Odpovídá na Michal Žůrek - misaz
Jirka:22.11.2016 12:34

Děkuji, jednoznačnou odpověď, kam psát script jsem zatím nedohledal, možná: "Skripty se někdy alternativně vkládají také těsně před </ body>. U větších aplikací bychom si na javascriptové soubory měli ideálně vytvořit nějakou složku, nabízí ze názvy skripty, scripts, js a podobně.", což mi úplně oči neotevřelo.
Script funguje, pokud ho vložím do těla HTML dokument pod text, avšak kód:

var tag = document.getElementsByTagName("p")[0].innerHTML;
document.write(tag);

mi nevrátí dle tutoriálu mi nevrátí text: "<span>Hello</span>wor­ld", ale " Helloworld".

Poslední dotaz je obecně ke getElement(s), v případě, že objektu přidám např. třídu "haha"

var tag = document.getElementsByClassName("haha");
document.write(tag);

tak mi vypíše [object HTMLCollection], je tedy nutné vždy upřesnit(.inner­HTML, .textContent)?

Omlouvám se za možná stupidní dotazy, avšak z článku to není dost zřejmé nebo jsem to nepochopil :-|

Děkuji

Jirka

 
Odpovědět
22.11.2016 12:34
Avatar
Michal Žůrek - misaz:22.11.2016 19:41
var tag = document.getElementsByTagName("p")[0].innerHTML;
document.write(tag);

ve skutečnosti vrátí <span>Hello</span>wor­ld
, akorát jak ho to vloží do dokumentu, tak to prohlížeč začne interpretovat a ty značky tam nejdou vidět.

document.getElementsByClassName("haha");

vrací kolekci elementů. Kolekci elementů nemůžeš takhle vypsat. Pokud se učíš s DOM doporučuji zapomenout že existuje nějaká prokletá metoda document.write a skutečně to udělat přes DOM. ty souvislosti si tam víc uvědomíš.

 
Odpovědět
22.11.2016 19:41
Avatar
Lenka
Tvůrce
Avatar
Lenka:12.6.2017 21:39

Tak nevim, ale to p.innerHTML nefunguje. Leda
document.getE­lementsByTagNa­me("p")
alert(p[0].in­nerHTML)
pak zobrazi obsah elementu

A taky jsem nasla
http://www.ivt.mzf.cz/…javascriptu/
se stejnym obsahem

Ze by stejny autor?

 
Odpovědět
12.6.2017 21:39
Avatar
Lenka
Tvůrce
Avatar
Lenka:12.6.2017 21:42

Oprava, skoda, ze uz to nejde editovat
var p=document.ge­tElementsByTag­Name("p")
//v p jsou ulozeny vsechny odstavce indexovany od 0
alert(p[0].in­nerHTML)
//obsah prvniho

 
Odpovědět
12.6.2017 21:42
Avatar
Odpovídá na Lenka
Michal Žůrek - misaz:12.6.2017 21:51

ahoj, ukázka kódu předpokládá, že v proměnné p je již nějaký elment načtený libovolnou z výběrových metod (viz. výše v článku).

Děkuji také za upozornění na plagiát. Jsem originálním autorem článku. Gymnázium (nebo někdo kdo se tak vydává) je "uwarezil" a budu to řešit.

 
Odpovědět
12.6.2017 21:51
Avatar
Lenka
Tvůrce
Avatar
Lenka:12.6.2017 22:15

No pri tomto zapisu by to fungovalovo jen pro getElementById, kde p by mel patricne id, protoze getElements... vraci jako vysledek oindexovane objekty, kdezto v prvnim pripade je jen jeden mozny odstavec.

Hodne stesti pri reseni, se mi v zivote jeste nepovedlo nic z takovych a podobnych ustrku vyresit.

 
Odpovědět
12.6.2017 22:15
Avatar
Karel Chrobák:1.1.2018 21:14

Ahoj, prosím o navedení na správnou cestu...
Mám seznam států a jejich popis. Názvy států jsou viditelné, ale jejich popis je ve výchozím stavu skrytý. Pokud klepnu na název státu, zobrazí se mi jeho popis. Tzn. klepnutím na název státu si s getElementById vyhledám příslušné pole s popisem a s setAttribute vložím do pole style="displa­y:block". To mi zobrazí popis státu. Dál už ale tápu. Pokud klepnu na další název státu, zobrazí se mi sice příslušný blok s popisem, ale ten původní zůstane zobrazen, protože tam je stále vložen style="displa­y:block". Jak bych to měl udělat, aby se mi při klepnutí na další stát skryl popis předchozího, tedy aby se z něj opět odebral atribut style="..."?
Děkuji

Odpovědět
1.1.2018 21:14
Stále se učím a stále toho vím míň a míň.
Avatar
Jiří Fencl
Člen
Avatar
Odpovídá na Karel Chrobák
Jiří Fencl:1.1.2018 21:32

Misto nastavovani primo style nastavuj unikatni tridu, skryvani vyres pres CSS definici te tridy, pak pri kliku vyhledej elementy s danou tridou, tu odstran a pridej jen aktivnimu popisku

 
Odpovědět
1.1.2018 21:32
Avatar
Odpovídá na Karel Chrobák
Michal Žůrek - misaz:2.1.2018 9:04

buď to udělej přes třídu jak radí Jiří Fencl nebo prostě použil cykl a všechny nejprve vresetuj na display:none a teprve pak ten jeden na display:block

 
Odpovědět
2.1.2018 9:04
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 114.