Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как присвоить классы в скрипте? (https://javascript.ru/forum/misc/81476-kak-prisvoit-klassy-v-skripte.html)

Ubivectel 03.12.2020 14:17

Как присвоить классы в скрипте?
 
Здравствуйте.

JS не владею, но жизнь принуждает к добровольным действиям, итак, есть скрипт выводящий на сайте время и дату. Очень хочется присвоить времени и дате отдельные классы, что бы стилизовать в css. Не подскажите как это сделать? Вот сам скрипт:

(function (global) {
    "use strict";
    function Clock(el) {
        var document = global.document;
        this.el = document.getElementById(el);
        this.months = ['Янв', 'Фев', 'Марта', 'Апр', 'Мая', 'Июня', 'Июля', 'Августа', 'Сент', 'Окт', 'Нояб', 'Дек'];
        this.days = ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'];
    }
    Clock.prototype.addZero = function (i) {
        if (i < 10) {
            i = "0" + i;
            return i;
        }
        return i;
    };
    Clock.prototype.updateClock = function () {
        var now, year, month, dayNo, day, hour, minute, second, result, self;
        now = new global.Date();
        year = now.getFullYear();
        month = now.getMonth();
        dayNo = now.getDay();
        day = now.getDate();
        hour = this.addZero(now.getHours());
        minute = this.addZero(now.getMinutes());
        second = this.addZero(now.getSeconds());
        result = this.days[dayNo] + ". " + day + " " + this.months[month] + ". " + year + " - " + hour + ":" + minute;
        self = this;
        self.el.innerHTML = result;
        global.setTimeout(function () {
            self.updateClock();
        }, 1000);
    };
    global.Clock = Clock;
}(window));

function addEvent(elm, evType, fn, useCapture) {
    "use strict";
    if (elm.addEventListener) {
        elm.addEventListener(evType, fn, useCapture);
    } else if (elm.attachEvent) {
        elm.attachEvent('on' + evType, fn);
    } else {
        elm['on' + evType] = fn;
    }
}

addEvent(window, "load", function () {
    if (document.getElementById("clock")) {
        var clock = new Clock("clock");
        clock.updateClock();
    }
});

рони 03.12.2020 14:24

Ubivectel,
result = "<span class='day'>" +this.days[dayNo] + ". " + day + " " + this.months[month] + ". " + year + "</span> - <span class='time'>" + hour + ":" + minute + "</span>";

Ubivectel 03.12.2020 14:31

Спасибо рони, все работает как надо ))

Ubivectel 05.12.2020 21:34

Не стал создавать новую тему, ибо вопрос очень похожий. Имеется чат, когда приходит личное сообщение, под списком юзеров появляется аватар и ник отправителя, аватар вот с таким стилем ('border', '2px solid red') прописанном в JS. После клика на нем открывается окно сообщений, а стиль аватара меняется на ('1px solid black'). Хотелось бы что бы стиль присваивал не JS а менял класс или айди аватара, что бы оформить его уже в css.
Вот интересующие строчки кода:

kide.privados.aviso = function(alias) {
	kide.css ('KIDE_privados_avatar_'+alias, 'border', '2px solid red');


Этого наверное недостаточно, вот ссылка на сам файл: https://noviy-kovcheg.ru/components/...ult/js/kide.js

рони 05.12.2020 22:43

Ubivectel,
пробуйте,
заменить kide.css на
kide.$('KIDE_privados_avatar_'+alias).classList.add('red_privados');

вместо red_privados указать нужный класс.

Ubivectel 09.12.2020 18:14

Ситуация выглядит следующим образом:

с дефолтным кодом JS в инспекторе браузера я вижу следующее:

<img alt="" onclick="kide.privados.maximizar(1,true)" style="cursor: pointer; border: 2px solid red;" id="KIDE_privados_avatar_1" class="KIDE_avatar" src="http://www.gravatar.com/avatar/d120239cc325270cf181fa50d9d69a85?s=50&amp;d=wavatar">


При клике на аватаре (он же открывает сообщение) значение атрибута style, меняется на "cursor: pointer; border: 1px solid white;"

При свернутом окне сообщений при поступлении нового стайл опять меняется на красный бордер.

когда сменил строку на

kide.$('KIDE_privados_avatar_'+alias).classList.add('red_privados');


вместо изменения стиля соответственно присваивается указанный класс, но он не исчезает при открытии сообщения, то есть постоянно сигнализирует о получении нового.
По моему задача сложнее чем мне казалось :(

Ubivectel 09.12.2020 18:54

Сорри, неверно написал, пока окно сообщений свернуто, style остается : "cursor: pointer; border: 1px solid white;"
И только при поступлении нового меняется на: "cursor: pointer; border: 2px solid red;"

Ubivectel 17.12.2020 14:50

Вряд ли кому-то пригодится, но скрипя мозгами решил вопрос следующи образом, заменил это:

kide.css ('KIDE_privados_avatar_'+alias, 'border', '2px solid red');


На это:

kide.$('KIDE_privados_avatar_'+alias).classList.add('red_privados');



далее нашел строку меняющую стиль при прочтении сообщения:

kide.css('KIDE_privados_avatar_'+alias, 'border', '1px solid white');


И по подсказке рони вместо измения стиля, вписал удаление класса:

kide.$('KIDE_privados_avatar_'+alias).classList.remove('red_privados');


Возможно решение не идеально, но цель достигнута. Рони спасибо за "удочку" :)

рони 17.12.2020 14:57

Ubivectel,
:victory:


Часовой пояс GMT +3, время: 18:20.