Javascript ".attr" не работает на ie11 и вопросы оптимизации - PullRequest
0 голосов
/ 23 января 2019

Он отлично работает со следующим JavaScript.

Однако я не знаю, как проверить, есть ли значение «дата окончания» при первой загрузке.

Это JavaScript, который ведет обратный отсчет со значением конечной даты.

Например: (На самом деле li выставляется как оператор for)

<ul>
<li>
<div id="time-wrap" class="time-countdown" data-end-date="2019-01-25 14:00:00"></div>
</li>
<li>
<div id="time-wrap" class="time-countdown" data-end-date=""></div>
</li>
<li>
<div id="time-wrap" class="time-countdown" data-end-date="2019-01-27 14:00:00"></div>
</li>
<li>
<div id="time-wrap" class="time-countdown" data-end-date=""></div>
</li>
<li>
<div id="time-wrap" class="time-countdown" data-end-date="2019-01-29 14:00:00"></div>
</li>
<li>
<div id="time-wrap" class="time-countdown" data-end-date="2019-01-29 14:00:00"></div>
</li>
.
.
.
</ul>
$('.time-countdown').each(function(i){
        var timeSaleWrap = $(this);
        var serialDate = timeSaleWrap.data('end-date');//data value
        var endDate = new Date(serialDate); 

        timeSaleWrap.attr('id', "time-wrap" + (i + 1));
        Timesalescounter(endDate, 'time-wrap' + (i + 1));

        function Timesalescounter(dt, id) {

            var endTime = new Date(dt);
            var slaeEnd = endTime.getTime(dt);
            var evEdate = slaeEnd;

            var timer;


            function actuionWrap() {

            var startTime = new Date();
            var today = startTime.getTime();
            var evSdate = today;
            var deltaTime = evEdate - evSdate;

            var s = Math.floor(deltaTime / 1000);
            var m = Math.floor(s / 60);
            var h = Math.floor(m / 60);
            var d = Math.floor(h / 24);

            h %= 24;
            m %= 60;
            s %= 60;

            var weeks = Math.floor(d / 7);
            var d = d - weeks * 2;

            var timeS = Math.floor( evSdate / 1000 );
            var timeE = Math.floor( evEdate / 1000 );
            var timeT = Math.floor( timeE - timeS );

                if ( !timeT || timeT < 0 ) {
                    document.getElementById(id).style.display = "none";
                    clearInterval(timer);
                    document.getElementById(id).textContent = "00h";
                    document.getElementById(id).textContent = "00m";
                    document.getElementById(id).textContent = "00s";

                    return;
                } else {

                    h = (h < 10) ? "0" + h : h;
                    m = (m < 10) ? "0" + m : m;
                    s = (s < 10) ? "0" + s : s;

                    var time_content= "<div class='clock-wrap'>"+
                        "<div class='days cell' title='Days'>"+d+"<span id='sp_days'>days</span></div>"+
                        "<div class='hours cell' title='Hours'>"+h+"<span id='sp_hours'>hours</span></div>"+
                        "<div class='mins cell' title='Minutes'>"+m+"<span id='sp_minutes'>mins</span></div>"+
                        "<div class='secs cell' title='Seconds'>"+s+"<span id='sp_seconds'>secs</span></div>"+
                        "</div>";

                    document.getElementById(id).innerHTML = time_content;


                }

            } //actuionWrap

            timer = setInterval(actuionWrap, 1000);

        }
    });

Сейчас существует 5примеров, но на практике их может быть больше 100.

Этот JavaScript, похоже, занимает много времени для загрузки при первой загрузке страницы.

Есть ли значение для "data-end"-date "и мне не нужно проверять это?

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

Как выоптимизировать его?

Добавить: Почему он не работает в IE11?Нет ошибок / ошибка отображается.

timeSaleWrap.attr('id', "timesale-wrap" + (i + 1));

Не работает.

...