🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.www
Article #408749

Re: getElementById zwraca null

#408749
From: Jivanmukta
Date: Mon, 19 Nov 2018 08:31
48 lines
2894 bytes
W dniu 19.11.2018 o 08:54, Jivanmukta pisze:
> 
>> 3. Ponadto z nazwy w/w funkcji wnioskuję iż naruszasz strukturę DOM by 
>> coś zanimować. Nie wiem jak konkretnie animujesz więc tylko zgaduję. 
>> Jeśli np. używasz innerHTML gdzieś dalej do zapisu, to wtedy takie 
>> cuda mogą się dziać. Nie należy używać do tego celu innerHTML bo jest 
>> strasznie wolne gdyż wymusza odświeżanie _CAŁEJ_ struktury DOM. Wtedy 
>> okresowo możesz tracić dostęp do DOM mimo iż pozornie wydaje Ci się, 
>> że nic się w niej nie zmienia. To dość częsty błąd początkujących 
>> programistów JS a i zaawansowani czasem też o tym nie wiedzą.
>>
> 
> // Animuj literkę w napisie tytułowym:
> 
> var letterIndex = -1;
> var mainTitle;
> 
> function animateMainTitle() {
>      'use strict';
>      if (mainTitle === undefined) {
>          mainTitle = document.getElementById("main_title").innerHTML;
>      }
>      letterIndex = (letterIndex + 1) % mainTitle.length;
>      var s = mainTitle.substr(0, letterIndex) +
>              '<span class="selected_letter">' +
>              mainTitle.substr(letterIndex, 1) +
>              '</span>' +
>              mainTitle.substr(letterIndex + 1);
>      document.getElementById("main_title").innerHTML = s;
>      setTimeout(animateMainTitle, 100);
> }
> 
> Czy gdybym zamiast innerHTML umieścił wszystkie literki w span'ach i 
> ustawiał tylko atrybut class odpowiedniej literki to byłoby lepiej?

Zrobiłem tak i jest dobrze:

var letterIndex = 0;
function animateMainTitle() {
     'use strict';
     document.getElementById('letter' + letterIndex).className = '';
     letterIndex = (letterIndex + 1) % 24;
     document.getElementById('letter' + letterIndex).className = 
'selected_letter';
     setTimeout(animateMainTitle, 100);
}

Dzięki za pomoc.
Technical Details
Message-ID: <pstsdn$1p3et$1@portraits.wsisiz.edu.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!.POSTED.public-gprs352856.centertel.pl!not-for-mail
References: <psa4kg$1d6er$1@portraits.wsisiz.edu.pl> <pss93t$rda$1@node1.news.atman.pl> <pstq77$1p1on$1@portraits.wsisiz.edu.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!.POSTED.public-gprs352856.centertel.pl!not-for-mail
From: Jivanmukta <jivanmukkta@poczta.onet.pl>
Newsgroups: pl.comp.www
Subject: Re: getElementById zwraca null
Date: Mon, 19 Nov 2018 09:31:47 +0100
Organization: http://www.wit.edu.pl
Message-ID: <pstsdn$1p3et$1@portraits.wsisiz.edu.pl>
References: <psa4kg$1d6er$1@portraits.wsisiz.edu.pl> <pss93t$rda$1@node1.news.atman.pl> <pstq77$1p1on$1@portraits.wsisiz.edu.pl>
Mime-Version: 1.0
Injection-Date: Mon, 19 Nov 2018 08:31:51 -0000 (UTC)
Injection-Info: portraits.wsisiz.edu.pl; posting-host="public-gprs352856.centertel.pl:37.47.9.153"; logging-data="1871325"; mail-complaints-to="abuse@wsisiz.edu.pl"
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1
In-Reply-To: <pstq77$1p1on$1@portraits.wsisiz.edu.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit