JS код ― что куда класть
JS и HTML зачастую сильно связаны между собой. Чуть тронешь HTML – ломается JS. Что-то меняешь в JS – нужно править HTML. Усугубляется проблема тем, что JS кода и файлов со временем становится все больше. Понять, что от чего зависит и на что влияет, становится затруднительно. Есть несколько простых приемов, которые упрощают жизнь.
Не смешивать классы для JS и CSS
В html разметке можно явно указать от каких тегов зависит работа JavaScript кода. Для этого заводят классы с префиксом js-
, по аналогии с CSS селекторами. Например: js-submit
или js-title
. Такие классы предназначены исключительно для привязки JavaScript кода, для CSS используются другие классы.
Благодаря такому приему редактировать разметку становится проще и безопаснее. Изменение визуального оформления не ломает JS.
Вставки JS в HTML
Если кода мало и он завязан на верстку — стоит разместить его непосредственно в HTML документе, оставить небольшие включения JS кода
Такая разметка и JS код не используются отдельно друг от друга. Они связаны друг с другом, удобно когда все это лежит в одном месте.
HTML документ инициализирует JS
Если JS кода много, либо он используется на разных страницах – вынести его в отдельный JS файл. Но при этом код инициализации стоит оставить на HTML странице. Например, это может быть явный вызов функции с передачей селекторов DOM дерева и прочих параметров конфигурации. Смысл в том, чтобы явно указать зависимости в HTML документе. В таком коде проще разобраться, он устойчивее.
<script src="./popup.js"></script>
<script type="text/javascript">
bind_popup('.js-popup-toggle', '.js-popup-template')
</script>
Шаблон разместить в теге <script type=“text/template”>
На стороне браузера часто используется шаблонизация. Например, для динамических модальных окон или всплывающих сообщений. Шаблонизаторов существует масса, под разные задачи и на любой вкус. Но в любом случае встает вопрос “Куда положить сам шаблон?”
Можно хранить его в виде строки JS кода. Но, как правило, это неудобно. Верстка расползается по множеству файлов, её становится сложно поддерживать.
Вариант лучше ― поместить шаблон в специальный тег в файле HTML документа:
<script type="text/template" id="popup_template">
<h1>Hello, {username}!</h1>
<p>Lorem ipsum dolor sit amet..</p>
</script>
<script type="text/javascript">
var container = document.getElementById('popup_template');
var containerContent = container.textContent || container.innerText;
render_template(containerContent, {
username: 'Bob',
});
</script>