Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.11.2016, 04:51
Аватар для zulyamodx
Интересующийся
Отправить личное сообщение для zulyamodx Посмотреть профиль Найти все сообщения от zulyamodx
 
Регистрация: 07.10.2016
Сообщений: 23

Как добавлять класс к li если в div сlass = 1-5
Здравствуйте.

Имеется такой html код:

<div class="rat_box">
    <ul class="rating">
     <li class=""></li><li class=""></li><li class=""></li><li class=""></li><li class=""></li>   </ul>
    <div class="num">0</div>

    </div>


Хочу реализовать такое с помощью javascript:
Если в <div class="num">1</div>, то в 1 li class (<li class=""></li>) добавляем класс r100, а остальные 4 <li class=""></li> оставляем пустыми.
Если <div class="num">2</div>, то в двух первых<li class=""></li> к ним добавляем класс r100, то есть так:
<div class="rat_box">
    <ul class="rating">
     <li class="r100"></li><li class=""></li><li class=""></li><li class=""></li><li class=""></li>   </ul>
    <div class="num">1</div>

    </div>

<div class="rat_box">
    <ul class="rating">
     <li class="r100"></li><li class="r100"></li><li class=""></li><li class=""></li><li class=""></li>   </ul>
    <div class="num">2</div>

    </div>

<div class="rat_box">
    <ul class="rating">
     <li class="r100"></li><li class="r100"></li><li class="r100"></li><li class=""></li><li class=""></li>   </ul>
    <div class="num">3</div>

    </div>

<div class="rat_box">
    <ul class="rating">
     <li class="r100"></li><li class="r100"></li><li class="r100"></li><li class="r100"></li><li class=""></li>   </ul>
    <div class="num">4</div>

    </div>

<div class="rat_box">
    <ul class="rating">
     <li class="r100"></li><li class="r100"></li><li class="r100"></li><li class="r100"></li><li class="r100"></li>   </ul>
    <div class="num">5</div>

    </div>

Такое возможно сделать с помощью javascript? Если да, пожалуйста, напишите как это сделать? В интернете искала и тут форуме тоже. Не нашла. Наверно это из-за того что я даже не знаю как называется эта функция в javascript. Пожалуйста, помогите. Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 02.11.2016, 05:14
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Классический стиль:
var nums = document.querySelectorAll('div.rat_box div.num'), i = nums.length;
while(i--) 
  for(var j = 0, length = +nums[i].innerHTML, lis = nums[i].parentNode.querySelectorAll('ul.rating li'); j < length; j++) 
    if(lis[j]) lis[j].className = 'r100';
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 02.11.2016, 05:41
Аватар для zulyamodx
Интересующийся
Отправить личное сообщение для zulyamodx Посмотреть профиль Найти все сообщения от zulyamodx
 
Регистрация: 07.10.2016
Сообщений: 23

Сообщение от Aetae Посмотреть сообщение
Классический стиль:
var nums = document.querySelectorAll('div.rat_box div.num'), i = nums.length;
while(i--) 
  for(var j = 0, length = +nums[i].innerHTML, lis = nums[i].parentNode.querySelectorAll('ul.rating li'); j < length; j++) 
    if(lis[j]) lis[j].className = 'r100';
Здравствуйте.
Спасибо большое за помощь.
Скрипт корректно работает если есть только 1 такой блок:
<div class="rat_box">
    <ul class="rating">
     <li class=""></li><li class=""></li><li class=""></li><li class=""></li><li class=""></li>   </ul>
    <div class="num">0</div>
 
    </div>

У меня таких блок много. Так как на странице выводятся отзывы с их оценками. У каждого отзыва по 6 таких блоков.
Каждый раз когда добавляются новые отзывы, на страницу также добавляются новые 6 таких блоков.

Может проблема не в этом? Как думаете? Спасибо.
Ответить с цитированием
  #4 (permalink)  
Старый 02.11.2016, 05:44
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Сообщение от zulyamodx Посмотреть сообщение
Скрипт корректно работает если есть только 1 такой блок:
Это не правда:
<div class="rat_box">
  <ul class="rating">
    <li class=""></li><li class=""></li><li class=""></li><li class=""></li><li class=""></li>   </ul>
  <div class="num">0</div>
</div>
<div class="rat_box">
  <ul class="rating">
    <li class=""></li><li class=""></li><li class=""></li><li class=""></li><li class=""></li>   </ul>
  <div class="num">1</div>
</div>
<div class="rat_box">
  <ul class="rating">
    <li class=""></li><li class=""></li><li class=""></li><li class=""></li><li class=""></li>   </ul>
  <div class="num">2</div>
</div>
<div class="rat_box">
  <ul class="rating">
    <li class=""></li><li class=""></li><li class=""></li><li class=""></li><li class=""></li>   </ul>
  <div class="num">3</div>
</div>
<div class="rat_box">
  <ul class="rating">
    <li class=""></li><li class=""></li><li class=""></li><li class=""></li><li class=""></li>   </ul>
  <div class="num">3</div>
</div>
<div class="rat_box">
  <ul class="rating">
    <li class=""></li><li class=""></li><li class=""></li><li class=""></li><li class=""></li>   </ul>
  <div class="num">4</div>
</div>
<div class="rat_box">
  <ul class="rating">
    <li class=""></li><li class=""></li><li class=""></li><li class=""></li><li class=""></li>   </ul>
  <div class="num">5</div>
</div>
<script>
var nums = document.querySelectorAll('div.rat_box div.num'), i = nums.length;
while(i--)
  for(var j = 0, length = +nums[i].innerHTML, lis = nums[i].parentNode.querySelectorAll('ul.rating li'); j < length; j++)
    if(lis[j]) lis[j].className = 'r100';
</script>
<style>
li{float:left;padding-left:1em}
.r100{color: red}
</style>
Сообщение от zulyamodx Посмотреть сообщение
Каждый раз когда добавляются новые отзывы, на страницу также добавляются новые 6 таких блоков.
Каждый раз как добавляются надо вызывать этот код заново для добавленных.

Но вообще, по-хорошему, это должен делать сервер, сразу расставляя нужные классы.
__________________
29375, 35

Последний раз редактировалось Aetae, 02.11.2016 в 05:56.
Ответить с цитированием
  #5 (permalink)  
Старый 02.11.2016, 06:08
Аватар для zulyamodx
Интересующийся
Отправить личное сообщение для zulyamodx Посмотреть профиль Найти все сообщения от zulyamodx
 
Регистрация: 07.10.2016
Сообщений: 23

Действительно, добавила код перед каждым блоком, и все заработало. Классно! Большое вам спасибо!
Ответить с цитированием
  #6 (permalink)  
Старый 02.11.2016, 16:35
Аватар для zulyamodx
Интересующийся
Отправить личное сообщение для zulyamodx Посмотреть профиль Найти все сообщения от zulyamodx
 
Регистрация: 07.10.2016
Сообщений: 23

Сообщение от Aetae Посмотреть сообщение
Это не правда:
Да, я ошиблась. Оказывается я вставляла код сверху блоков. Поэтому некорректно отображало. Но после того как спустила код вниз и добавила этот js код один раз, все корректно работает.
Большое вам спасибо, что потратили на меня столько вашего времени. Я очень благодарна вам, Aetae.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как запретить вход на сайт если.... dezytube Элементы интерфейса 1 26.08.2016 15:12
Как вернуть div и все вложенные в него элементы в первоначальное состояние? lucky89 Общие вопросы Javascript 17 26.02.2015 18:41
как обернуть страницу во фрейм если она не хочет? Kvark Элементы интерфейса 19 07.08.2013 15:46
setInterval добавлять класс по таймеру igsavenko jQuery 2 06.07.2010 13:00
Как сравнить класс, если их много!? Sc@M Events/DOM/Window 16 29.08.2008 12:47