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?
Odpowiedz
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, 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. –
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. –
+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
- 1. Dlaczego powinno się unikać @@ class_variables w Ruby?
- 2. Dlaczego innerHTML zwraca "niezdefiniowany"?
- 3. Dlaczego nie zaleca się zatrzymywania fragmentów za pomocą interfejsu użytkownika?
- 4. Czy zaleca się stosowanie wzorca mediatora?
- 5. Niezależne stowarzyszenia EF4 - Dlaczego ich unikać?
- 6. Dlaczego należy unikać Runtime.exec() w java?
- 7. dlaczego unikać ciągłego składania w Javie? Gdy?
- 8. Czy zaleca się pułapkę SIGPIPE w skrypcie Bash?
- 9. Dlaczego użytkownicy cocos2d-iphone powinni unikać używania rozszerzenia @ 2x?
- 10. BeautifulSoup innerhtml?
- 11. Dlaczego React Native docs zaleca użycie abstrakcji na AsyncStorage?
- 12. zaleca css notacja
- 13. Dlaczego firma Apple zaleca programowe tworzenie kontrolerów nawigacyjnych?
- 14. Dlaczego nie zaleca się używania funkcji przechowywanych po stronie serwera w MongoDB?
- 15. Dlaczego nie zaleca się zamykać połączenia MongoDB w dowolnym miejscu kodu Node.js?
- 16. Dlaczego zaleca się wyprowadzać z klasy Exception zamiast klasy BaseException w Pythonie?
- 17. Dlaczego nie zaleca się używania metody attach() w wersji R i co powinienem zamiast tego użyć?
- 18. Dlaczego nie zaleca się posiadania folderu projektu Eclipse jako repozytorium Git?
- 19. Czy zaleca się podpisywanie i szyfrowanie SAML I używanie SSL?
- 20. Tworzenie kalkulatora JQuery, zmienianie innerHTML, ale nic się nie dzieje
- 21. Dlaczego dołączanie do innerHTML w bookmarkletie zastępuje całą stronę?
- 22. Dlaczego document.getElementById ("tableId"). InnerHTML nie działa w IE8?
- 23. Alternatywa dla innerHTML?
- 24. dlaczego zastępując InnerHTML z innerText powoduje> 15X spadek wydajności
- 25. InnerHTML dołączyć zamiast zastąpienia
- 26. Dlaczego mój obraz nie wyświetla się, gdy używam JavaScript innerHTML do wywoływania tego obrazu?
- 27. zaleca konfigurację Nginx dla meteor
- 28. przełącznik Unikać przypadek -linq
- 29. innerHTML zastąpić nie odzwierciedla
- 30. Xpath i innerHTML
Kto powiedział, że nie powinieneś go używać? A co jest szybsze od czego? – Steve
'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). –