Nieco przypadkiem odkryłem, że przęsło wstawione bezpośrednio wewnątrz tsinu pozostaje na swoim miejscu, gdy zostanie zrobione za pomocą JavaScript (insertBefore), gdzie taki niepoprawny DOM mógłby zostać utworzony z dosłownym prowadzeniem HTML do przęsła umieszczonego przed całą tabelą.Czy to normalne, że JavaScript może stworzyć nieprawidłowy DOM?
Spodziewałem się zachowania podobnego do literalnego HTML lub wyrzucania wyjątku DOM.
E.g. to HTML
<table>
<thead><tr><th>Table Header</th></td></thead>
<tbody>
<span>from HTML → goes up</span>
<tr><td>Table Contents</td></tr>
</tbody>
</table>
z tej JavaScript:
var span = document.createElement('span'),
tbody = document.querySelector('tbody');
span.innerHTML = 'Created with JS → stays in place';
tbody.insertBefore(span, tbody.querySelector('tr'));
renderuje "Utworzony z JS → pozostaje na swoim miejscu" pomiędzy nagłówkiem a pierwszym rzędzie; oryginalny, dosłowny, zakres porusza się poza stołem.
Czy to normalne i czy mogę/powinienem na to liczyć? (Zachowuje się tak samo w FF, Chrome, Opera, IE> = 9 (nie testowane poniżej)).
Ponadto istnieje sposób na zapytanie do DOM, czy zawartość określonego typu (w normalnych warunkach) byłaby ważna w określonym punkcie DOM? Właśnie to chciałem zrobić, gdy dowiedziałem się o tym dziwactwie (którym jest, imho).
skrzypcach jest tutaj: http://jsfiddle.net/xr37g9kw/2/
Wykonanie tego prawdopodobnie popycha przeglądarkę w tryb dziwactwa –
DOM jest bardzo ogólnym modelem reprezentującym struktury drzewiaste. W rzeczywistości nie obejmuje żadnej weryfikacji. –
DOM ithelf pozwala ci popełniać tego rodzaju błędy, jeśli to by spowodowało błąd, również deklarowanie go prostym słowem 'html' musiałoby spowodować błąd. Dostawcy przeglądarek są zrelaksowani na tego rodzaju "błędach". –