Jak dołączyć ten ciąg HTML
var str = '<p>Just some <span>text</span> here</p>';
do DIV z identyfikatorem 'test'
znajdującym się w DOM?
(Btw div.innerHTML += str;
jest nie do przyjęcia.)
javascript
html
dom
browser
Šime Vidas
źródło
źródło
innerHTML
umieszcza napis w elemencie (zastępując wszystkie dzieci), natomiastinsertAdjacentHTML
umieszcza go (1) przed elementem, (2) po elemencie, (3) wewnątrz elementu przed pierwszym dzieckiem, lub (4) wewnątrz elementu po ostatnim dziecku.insertAdjacentHTML
jest szybsze niż dołączanie doinnerHTML
, ponieważinsertAdjacentHTML
nie serializuje i ponownie analizuje istniejących elementów podrzędnych elementu.insertAdjacentHTML
utrzymuje wartości odmiennych elementów formy, podczas gdy dodanie doinnerHTML
odbudowuje element i traci całą zawartość formy.Czy to jest dopuszczalne?
jsFiddle .
Ale , odpowiedź Neila jest lepszym rozwiązaniem.
źródło
innerHTML
?insertAdjacentHTML
.Występ
AppendChild
(E) jest ponad 2x szybsze niż inne rozwiązania na Chrome i Safari,insertAdjacentHTML
(F) jest najszybsze na Firefoxie.innerHTML=
(B) (nie mylić z+=
(A)) jest drugim szybkie rozwiązanie na wszystkich przeglądarkach i jest znacznie bardziej poręczny niż E i F.Detale
Skonfiguruj środowisko (2019.07.10) MacOs High Sierra 10.13.4 w przeglądarce Chrome 75.0.3770 (64-bitowa), Safari 11.1.0 (13604.5.6), Firefox 67.0.0 (64-bitowa)
Możesz powtórzyć test na swoim komputerze tutaj
Pokaż fragment kodu
źródło
Chodzi o to, aby użyć
innerHTML
elementu pośredniego, a następnie przenieść wszystkie jego węzły podrzędne tam, gdzie naprawdę chcesz, aby były przezappendChild
.Pozwala to uniknąć wymazania wszystkich
div#test
programów obsługi zdarzeń, ale nadal umożliwia dołączenie ciągu kodu HTML.źródło
Właściwy sposób to używanie
insertAdjacentHTML
. W przeglądarce Firefox starszej niż 8 możesz wrócić do używania,Range.createContextualFragment
jeślistr
nie zawierascript
tagów.Jeśli twoje
str
zawierająscript
tagi, musisz usunąćscript
elementy z fragmentu zwróconego przezcreateContextualFragment
przed wstawieniem fragmentu. W przeciwnym razie skrypty będą działać. (insertAdjacentHTML
oznacza skrypty niewykonalne.)źródło
createContextualFragment
. Szukałem sposobu, aby niektóre pliki HTML były uruchamiane ze skryptami tylko wtedy, gdy użytkownik zgodzi się ustawić plik cookie.Szybki hack :
Przypadki użycia :
1: Zapisz jako plik .html i uruchom w przeglądarce Chrome, Firefox lub Edge. (IE nie będzie działać)
2: Użyj w http://js.do
W akcji: http://js.do/HeavyMetalCookies/quick_hack
Podzielone komentarzami:
Powód, dla którego opublikowałem:
JS.do ma dwie niezbędne cechy:
Ale nie wyświetla komunikatów console.log. Przyjechałem tutaj, szukając szybkiego rozwiązania. Chcę tylko zobaczyć wyniki kilku wierszy kodu brudnopisu, inne rozwiązania to zbyt dużo pracy.
źródło
Dlaczego jest to niedopuszczalne?
document.getElementById('test').innerHTML += str
byłby podręcznikowym sposobem na zrobienie tego.
źródło
#test
. Na ogół nie jest to pożądane.To może rozwiązać
źródło
InnerHTML usuwa wszystkie dane, takie jak zdarzenia dla istniejących węzłów
append child with firstChild dodaje tylko pierwsze dziecko do innerHTML. Na przykład, jeśli musimy dołączyć:
pojawi się tylko text1
A co z tym:
dodaje specjalny tag do innerHTML przez dołączenie child, a następnie edytuje externalHTML, usuwając utworzony przez nas tag. Nie wiem, jakie to inteligentne, ale działa dla mnie lub możesz zmienić externalHTML na innerHTML, więc nie musi używać funkcji zastępowania
źródło
Najkrótszy - 18 znaków (nie mylić
+=
(wspomniane przez OP),=
więcej szczegółów tutaj )Pokaż fragment kodu
źródło