Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.03.2016, 19:33
Аватар для derevo
Интересующийся
Отправить личное сообщение для derevo Посмотреть профиль Найти все сообщения от derevo
 
Регистрация: 14.03.2016
Сообщений: 10

Сравнить элементы с одинаковым классом и ...
Добрый день, уважаемые

Задача: сравнить содержимое элементов (li) с одинаковым классом (.srav и .srav2), и если во всех одинаковый текст (значение), то присвоить им класс (.odinak).

Структура до такая:
<ul>
<li class="srav">Текст 1</li>
<li class="srav"></li>
<li class="srav">Текст 3</li>
</ul>
<ul>
<li class="srav2">Текст 4</li>
<li class="srav2">Текст 4</li>
<li class="srav2">Текст 4</li>
</ul


Структура после такая:
<ul>
<li class="srav">Текст 1</li>
<li class="srav"></li>
<li class="srav">Текст 3</li>
</ul>
<ul>
<li class="srav2 odinak">Текст 4</li>
<li class="srav2 odinak">Текст 4</li>
<li class="srav2 odinak">Текст 4</li>
</ul

Последний раз редактировалось derevo, 14.03.2016 в 19:56.
Ответить с цитированием
  #2 (permalink)  
Старый 14.03.2016, 19:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

derevo,
может структуру до и после, сейчас только гадать о чём ваша структура, а так два цикла первый прервать если разница обнаружится если нет вторым циклом присвоить класс
Ответить с цитированием
  #3 (permalink)  
Старый 14.03.2016, 19:55
Аватар для derevo
Интересующийся
Отправить личное сообщение для derevo Посмотреть профиль Найти все сообщения от derevo
 
Регистрация: 14.03.2016
Сообщений: 10

Написал структуру до и после.
Натолкните пожалуйста на решение.
Ответить с цитированием
  #4 (permalink)  
Старый 14.03.2016, 20:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

derevo,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
     .odinak {
       background-color: #228B22;
     }

  </style>

</head>

<body>
<ul>
<li class="srav">Текст 1</li>
<li class="srav"></li>
<li class="srav">Текст 3</li>
</ul>
<ul>
<li class="srav2">Текст 4</li>
<li class="srav2">Текст 4</li>
<li class="srav2">Текст 4</li>
</ul>
<script>
window.addEventListener("DOMContentLoaded", function() {
    var b = document.querySelectorAll("ul");
    [].forEach.call(b, function(a) {
        a = a.querySelectorAll("li");
        var b = a[0].innerHTML;
        [].every.call(a, function(a) {
            return a.innerHTML == b
        }) && [].forEach.call(a, function(a) {
            a.classList.add("odinak")
        })
    })
});
</script>
</body>

</html>
Ответить с цитированием
  #5 (permalink)  
Старый 14.03.2016, 20:57
Аватар для derevo
Интересующийся
Отправить личное сообщение для derevo Посмотреть профиль Найти все сообщения от derevo
 
Регистрация: 14.03.2016
Сообщений: 10

Спасибо, но да, структуру не правильно написал. Нужно по другому.
На скрине показал как выглядит структура. Нужно при клике на чекбокс (только отличия) скрывать строку с одинаковыми значениями.
Т.е. получается нужно сравнить все li.osnovtd.tr10 (tr11, tr12, ...) (записать их в массив и там их перебрать и сравнить?), а потом присвоить им класс, для примера .hide
И для li.osnovtr.tr10 (tr11, tr12, ...) также присвоить класс .hide


Ответить с цитированием
  #6 (permalink)  
Старый 14.03.2016, 21:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

derevo,
нарисуйте эту структуру с картинки с кнопкой ... алгоритм скрипта от этого не изменится
Ответить с цитированием
  #7 (permalink)  
Старый 15.03.2016, 03:23
Аватар для derevo
Интересующийся
Отправить личное сообщение для derevo Посмотреть профиль Найти все сообщения от derevo
 
Регистрация: 14.03.2016
Сообщений: 10

Ну как не измениться, я же специально подсветил на скрине колонку ul в которой вложены li. А нужно сравнить не в колонке ul, а li у разных ul.
Ответить с цитированием
  #8 (permalink)  
Старый 15.03.2016, 06:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

derevo,
html please
Ответить с цитированием
  #9 (permalink)  
Старый 15.03.2016, 06:44
Аватар для derevo
Интересующийся
Отправить личное сообщение для derevo Посмотреть профиль Найти все сообщения от derevo
 
Регистрация: 14.03.2016
Сообщений: 10

При клике на чекбокс ("только отличия") скрывать строку с одинаковыми значениями (т.е. скрыть строки "Тип акустики - коаксиальная - коаксиальная - коаксиальная" и "Количество полос - 2 - 2 - 2").

Т.е. получается нужно сравнить все li.osnovtd.tr10 (tr11, tr12, ...) (записать их в массив и там их перебрать и сравнить?), а потом присвоить им класс, для примера .hide
И для li.osnovtr.tr10 (tr11, tr12, ...) также присвоить класс .hide

Имеем такую структуру:
<input id="filter" type="checkbox">только отличия
<div class="cd-products-table">
   <div class="feateres">
      <ul class="cd-feateres-list">
         <li class="osnovtr tr10">Тип акустики</li>
         <li class="osnovtr tr11">Количество полос</li>
         <li class="osnovtr tr12">Мощность номинальная</li>
         <li class="osnovtr tr13">Мощность максимальная</li>
      </ul>
   </div>
   <div class="cd-products-wrapper">
      <ul class="cd-products-coliumns">
         <li class="product">
            <ul class="cd-feateres-list">
               <li class="osnovtd tr10">коаксиальная</li>
               <li class="osnovtd tr11">2</li>
               <li class="osnovtd tr12">60 Вт</li>
               <li class="osnovtd tr13">180 Вт</li>
            </ul>
         </li>
         <li class="product">
            <ul class="cd-feateres-list">
               <li class="osnovtd tr10">коаксиальная</li>
               <li class="osnovtd tr11">2</li>
               <li class="osnovtd tr12">30 Вт</li>
               <li class="osnovtd tr13">90 Вт</li>
            </ul>
         </li>
         <li class="product">
            <ul class="cd-feateres-list">
               <li class="osnovtd tr10">коаксиальная</li>
               <li class="osnovtd tr11">2</li>
               <li class="osnovtd tr12">60 Вт</li>
               <li class="osnovtd tr13">240 Вт</li>
            </ul>
         </li>
      </ul>
   </div>
</div>


Нужно получить в итоге:
<input id="filter" type="checkbox" checked="checked">только отличия
<div class="cd-products-table">
   <div class="feateres">
      <ul class="cd-feateres-list">
         <li class="osnovtr tr10 hide">Тип акустики</li>
         <li class="osnovtr tr11 hide">Количество полос</li>
         <li class="osnovtr tr12">Мощность номинальная</li>
         <li class="osnovtr tr13">Мощность максимальная</li>
      </ul>
   </div>
   <div class="cd-products-wrapper">
      <ul class="cd-products-coliumns">
         <li class="product">
            <ul class="cd-feateres-list">
               <li class="osnovtd tr10 hide">коаксиальная</li>
               <li class="osnovtd tr11 hide">2</li>
               <li class="osnovtd tr12">60 Вт</li>
               <li class="osnovtd tr13">180 Вт</li>
            </ul>
         </li>
         <li class="product">
            <ul class="cd-feateres-list">
               <li class="osnovtd tr10 hide">коаксиальная</li>
               <li class="osnovtd tr11 hide">2</li>
               <li class="osnovtd tr12">30 Вт</li>
               <li class="osnovtd tr13">90 Вт</li>
            </ul>
         </li>
         <li class="product">
            <ul class="cd-feateres-list">
               <li class="osnovtd tr10 hide">коаксиальная</li>
               <li class="osnovtd tr11 hide">2</li>
               <li class="osnovtd tr12">60 Вт</li>
               <li class="osnovtd tr13">240 Вт</li>
            </ul>
         </li>
      </ul>
   </div>
</div>

Последний раз редактировалось derevo, 15.03.2016 в 06:46.
Ответить с цитированием
  #10 (permalink)  
Старый 15.03.2016, 07:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

derevo,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
     .hide {
        display: none;
     }

  </style>

</head>

<body>
<input id="filter" type="checkbox">только отличия
<div class="cd-products-table">
   <div class="feateres">
      <ul class="cd-feateres-list">
         <li class="osnovtr tr10">Тип акустики</li>
         <li class="osnovtr tr11">Количество полос</li>
         <li class="osnovtr tr12">Мощность номинальная</li>
         <li class="osnovtr tr13">Мощность максимальная</li>
      </ul>
   </div>
   <div class="cd-products-wrapper">
      <ul class="cd-products-coliumns">
         <li class="product">
            <ul class="cd-feateres-list">
               <li class="osnovtd tr10">коаксиальная</li>
               <li class="osnovtd tr11">2</li>
               <li class="osnovtd tr12">60 Вт</li>
               <li class="osnovtd tr13">180 Вт</li>
            </ul>
         </li>
         <li class="product">
            <ul class="cd-feateres-list">
               <li class="osnovtd tr10">коаксиальная</li>
               <li class="osnovtd tr11">2</li>
               <li class="osnovtd tr12">30 Вт</li>
               <li class="osnovtd tr13">90 Вт</li>
            </ul>
         </li>
         <li class="product">
            <ul class="cd-feateres-list">
               <li class="osnovtd tr10">коаксиальная</li>
               <li class="osnovtd tr11">2</li>
               <li class="osnovtd tr12">60 Вт</li>
               <li class="osnovtd tr13">240 Вт</li>
            </ul>
         </li>
      </ul>
   </div>
</div>

<script>
window.addEventListener("DOMContentLoaded", function() {
    var b = document.querySelector("#filter");
    b.addEventListener("change", function() {
        [".tr10", ".tr11", ".tr12", ".tr13"].forEach(function(a) {
            a = document.querySelectorAll(a);
            var c = a[1].innerHTML,
                c = b.checked && [].every.call(a, function(a, b) {
                    return !b || a.innerHTML == c
                }) ? "add" : "remove";
            [].forEach.call(a, function(a) {
                a.classList[c]("hide")
            })
        })
    })
});

</script>
</body>

</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите как сравнить первые элементы многомерного массива? yloboda Элементы интерфейса 3 08.06.2014 15:00
как посчитать какой по счету блок с одинаковым классом imedia Элементы интерфейса 8 27.05.2014 13:27
изменить цвет фона у всех элементов с одинаковым классом bigjoy Events/DOM/Window 10 07.01.2014 12:03
Присвоение значение элементам с одинаковым классом Mesher Общие вопросы Javascript 6 12.09.2012 17:11
достать value с полей с одинаковым классом zloctb Общие вопросы Javascript 3 09.01.2012 19:55