FlexStat
@FlexStat

Почему срипт js срабатывает частично?

Имеется вот такой вывод для генерации таблицы с данными:
<?foreach ($arResult["PROPERTIES"] as $arProp):?>
                                                <?if(!empty($arProp["VALUE"])):?>
                                                        <table id="table1">
                                                               <tr>
                                                                <td style = "padding: 10px;" ><span><?=$arProp["NAME"]?></span> </td>
                                                                <td style = "text-align: right !important; " ><span>

                                                                        <?if(!is_array($arProp["VALUE"])):?>
                                                                                <?=$arProp["VALUE"]?>
                                                                        <?else:?>
                                                                                <?foreach($arProp["VALUE"] as $arPropItem):?>
                                                                                        <?=$arPropItem?>;
                                                                                <?endforeach?>
                                                                        <?endif?>
                                                                </span></td>
                                                              </tr>
                                                        </table>
                                                <?endif?>


и такой js:

$(document).ready(function(){
    var tr = document.getElementById('table1').getElementsByTagName('tr'),
          i = tr.length;
    while(i--) {
        tr[i].style.backgroundColor = i%2 ? ' green' : 'white';
    }
})

ситуация такая, что скрипт закрашивает только первый tr остальные не закрашивается по условию.

Сильно не пинайте.
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Ну так у вас в таблице table1 только одна строка tr, поэтому цикл проходит только один элемент. И id у элементов должен быть уникален, возможно у вас куча table1. Поставьте таблицам класс .table, и перепишите вот так
$(document).ready(function(){
    var tr = document.querySelectorAll('.table tr'),
          i = tr.length;
    while(i--) {
        tr[i].style.backgroundColor = i%2 ? ' green' : 'white';
    }
})
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Предлагаю делать то же самое в php-шаблоне на этапе отрисовки таблицы
<?foreach ($arResult["PROPERTIES"] as $i => $arProp):?>
                                                <?if(!empty($arProp["VALUE"])):?>
                                                        <table id="table1">
                                                               <tr style="background-color:"<?= $i%2 ? 'green' : 'white' ?>">
// ...

Вместо атрибутов-style советую использовать class
Всё то же самое делается через стили
#table1 tr:nth-child(even) { background: #0f0; }
#table1 tr:nth-child(odd) { background: #fff; }

https://www.w3.org/Style/Examples/007/evenodd.en.html
Ответ написан
Stalker_RED
@Stalker_RED
js код вполне рабочий

Но можно вообще вот так:

А если нужно обязательно на js, то все делается немного проще, чем у вас:
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы