Как присвоить класс к блоку при загрузке страницы?

258
18 октября 2017, 08:12

Вкратце - с помощью чего можно задать присвоение класса блоку еще при загрузке страницы на нативном js?

Answer 1

var div = document.querySelector('div'); 
window.onload = () => { 
  div.className = 'div'; 
  console.log(div) 
}
<div></div>

Answer 2

Если в тот момент, когда загрузился HTML, но не загрузились картинки и фрэймы, то так:

document.addEventListener('DOMContentLoaded', function(){
    var block = document.getElementById("block");
    block.className += " myClass";
};
Answer 3

С помощью чего? Вы уже ответили себе на этот вопрос - с помощью JS.

Вероятно, вопрос в том, как?

Здесь сыграет роль следующая вещь. При загрузке страницы, если вы подразумеваете тот момент, когда она уже получена с сервера, но DOM еще не построен, сделать вы этого не сможете.

Правда, с одной небольшой оговоркой: DOM может быть и не построен, но тот элемент, которому вы хотите добавить класс, присутствовать обязан.

Поэтому, скрипт должен выполняться:

а) после полной готовности DOM
б) после готовности необходимого элемента

Вариант а):

Навесить на документ обработчик события "DOMContentLoaded", выполняющийся тогда, когда DOM построена, после чего добавить блоку класс:

document.addEventListener("DOMContentLoaded", function() {
    // код навешивания класса приведен ниже в ответе
});

Подключать внешний скрипт с атрибутом defer, гарантирующим выполнение скрипта по готовности DOM:

<script src="script.js" defer>

Вариант б):

Выполнять тело скрипта находится после необходимого элемента:

<div>Элемент, которому нужно добавить класс</div>
<script>// Сценарий добавления класса, опять же, приведен ниже</script>

Теперь о главном: как, собственно, добавить элементу класс?

Сначала находим необходимый элемент любым известным способом: это может быть поиск по id (document.getElementById), поиск по CSS-пути (document.querySelector), да по чему угодно, даже по классу, если у элемента, которому нужно его добавить, уже есть какой-либо класс. Дальше по ситуации выбираем наиболее подходящее решение:

Вариант 1:

element.className = "класс";

Минусы: такой подход полностью перезаписывает текущее значение атрибута class. Например, если до выполнения скрипта класс элемента element был равен class1 class2 myclass, то теперь он будет равен просто класс - предыдущие значения будут перезаписаны.

Вариант 2, "Улучшенный":

element.classList.add("Класс");

Данный подход добавит элементу класс. Предыдущие останутся, если были до этого. Если не было, то класс станет единственным классом элемента element.

Answer 4

Прочитал ответы, и если я правильно понял, вы хотите наоборот, до загрузки всего контента, чтобы был класс на блоке, тогда вы прям в html ставьте данный класс для блока

<div class="loaded"></div>

а потом на js,после загрузки всей страницы, удаляйте данный класс

window.onload = function() {
     var div = document.querySelector('.loaded')
     div.classList.remove("loaded");
}
READ ALSO
Проблема с параллаксом

Проблема с параллаксом

Есть такая разметка (pug):

228
Nasdaq.com исторические котировки через VBA POST

Nasdaq.com исторические котировки через VBA POST

Привет всем! Стоит задача собрать исторические котировки по бумаге с сайта nasdaqcom для дальнейшей их обработки и вывода отчета в MS Excel

222
Как поменять все четные ключи массива на нечетные и наоборот?

Как поменять все четные ключи массива на нечетные и наоборот?

У меня есть массив [1, 2, 3, 4], а нужно получить [2, 1, 4, 3]Может в php есть готовое решение? А если нет, то можно пожалуйста пример такой функции

189
Joomla. В ставка позиции для модуля

Joomla. В ставка позиции для модуля

JoomlaПодскажите пожалуйста, как создать позицию для модуля или материала

169