2013-08-29 10 views
9

Przepraszamy za bycie nokautem JavaScript, ale każdy może wyjaśnić, dlaczego nie zaleca się używania .innerHTML. Kiedy mamy coś, co jest szybsze i łatwiejsze w postaci .innerHTML, dlaczego nie powinniśmy go używać?Dlaczego zaleca się unikać .innerHTML?

+1

Kto powiedział, że nie powinieneś go używać? A co jest szybsze od czego? – Steve

+2

'innerHTML' działa na bazie danych szeregowanych, co nie jest sposobem, w jaki DOM działa koncepcyjnie. Jest stosunkowo łatwo zepsuć coś podczas ręcznego budowania dużych fragmentów kodu HTML, przez co trudniej jest je utrzymać. Również HTML wewnątrz JS jest przerażająco brzydki w oczach wielu doświadczonych programistów JS (i na pewno myślisz tak samo, gdy zobaczysz połowę pliku JS będącego mieszanką HTML z JavaScript). Właśnie dlatego mamy silniki szablonów JS, a także framework Angular. Ale tak, możesz umieścić HTML wewnątrz JS bez problemów pod względem funkcjonalności (zapisz kilka przypadków ze starym IE, na które odpowiedział @Evan). –

Odpowiedz

12

innerHTML to młot kowalski. Zniszczy zawartość wybranego elementu DOM i zastąpi je tym, co zostanie przypisane w danym momencie. Prowadzi to do wielu problemów z przechodzeniem do HTML i sprawdzaniem poprawności.

Co ważniejsze, dla stron, na których duża liczba zdarzeń jest powiązana, użycie innego elementu spowoduje odtworzenie elementów DOM, co oznacza, że ​​powiązania zdarzeń mogą zostać utracone.

Występują również pewne problemy dotyczące wycieków pamięci w starszych wersjach IE, gdy elementy są usuwane z DOM.


Z wszystkich powiedział, że nie mówię, że nie należy używać innerHTML. Używam go cały czas w jQuery, kiedy używam $(selector).html(). Czasami młot jest właściwym narzędziem do wykonania zadania, a kiedy wydarzenia zostaną odpowiednio przekazane, nie ma znaczenia, ile treści zostanie przeładowane.

+1

+1, prawie zapomniałem o ludziach, którzy próbowali "element.innerHTML + = ...", następnie zauważcie, jak wszystkie programy do obsługi zdarzeń/powiązane widżety z potomków tego elementu zostały przeniesione do kosza. –

+0

IIRC Pamiętam, że Resig robił kilka hacków dla różnych przeglądarek, ponieważ różnica w wydajności innerHtml. Sądzę, że to jeszcze jeden powód, by używać opakowania. –

+0

+1, podoba mi się analogia młota. Jeśli wiesz, jak prawidłowo używać innerHTML, możesz zaoszczędzić dużo czasu ... o ile nie musisz wykonywać skomplikowanych zadań. Podobnie jak młotek. – Steve

Powiązane problemy