Nimm doch script mit id und einem type ungleich text/javascript.
Wenn du dem
type
-Attribut desscript
-Elementes einen Wert gibst, mit dem der Browser nichts anfangen kann, dann wird er nicht versuchen den Inhalt zu interpretieren, aber du kannst trotzdem auf das Element zugreifen.
Allerdings kann man auf diese Weise nicht auf Nachfahren-Elemente zugreifen, da der Browser auch nicht versuchen wird den Inhalt des <script>-Elements zu parsen. Da der Inhalt hier aber HTML ist, erscheint mir das ersünscht zu sein. Mit dem <template>-Element anstelle des <script>-Elements erreicht man, dass der HTML-Inhalt geparst wird, aber vorerst noch in einem inaktiven Zustand verweilt, Inhalte werden nicht gerendert, Bilder nicht geladen etc.. Erst wenn Teile dieses DOM-Fragments in die Außenwelt verschoben oder kopiert werden, wird das DOM aktiv.