Javascript.RU

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

Аналог nextAll() на чистом javascript
Задался тут целью хоть раз написать плагин (точнее метод скорее) на нативном JS. Задача оказалась непростой, по отказу от jquery. Суть плагина: скрывать элементы под кнопку, если их больше определенного количества. Хочу использовать особо для длинных фильтров и еще где понадобится. Столкнулся со следующей проблемой не могу взять все элементы после нужного мне числа, то есть аналог nextAll().
Как это сделать?
Ответить с цитированием
  #2 (permalink)  
Старый 16.03.2017, 13:20
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Stay_Strong
Как это сделать?
Использовать свойство nextSibling у элементов...
http://www.fpublisher.ru/documentati...s#hnextsibling
Ответить с цитированием
  #3 (permalink)  
Старый 16.03.2017, 13:23
Аватар для Stay_Strong
Аспирант
Отправить личное сообщение для Stay_Strong Посмотреть профиль Найти все сообщения от Stay_Strong
 
Регистрация: 14.10.2015
Сообщений: 37

ksa,
Так он возвращает только один следующий элемент, а не все.
Ответить с цитированием
  #4 (permalink)  
Старый 16.03.2017, 13:25
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Stay_Strong
Так он возвращает только один следующий элемент, а не все
Так у тебя еще есть циклы...
Ответить с цитированием
  #5 (permalink)  
Старый 16.03.2017, 13:26
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Stay_Strong
Задался тут целью хоть раз написать плагин (точнее метод скорее) на нативном JS.
Не совсем понятно с чего ты решил, что тебе такое по силам, если ты основ не знаешь?
Ответить с цитированием
  #6 (permalink)  
Старый 16.03.2017, 13:35
Аватар для Stay_Strong
Аспирант
Отправить личное сообщение для Stay_Strong Посмотреть профиль Найти все сообщения от Stay_Strong
 
Регистрация: 14.10.2015
Сообщений: 37

ksa,
вот решил с основами и познакомиться таким образом. На jquery я писал плагин, получилось вроде бы неплохо.
Ответить с цитированием
  #7 (permalink)  
Старый 16.03.2017, 13:39
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Stay_Strong
вот решил с основами и познакомиться таким образом
С таким же успехом можно начать строить свою нефтяную компанию!
Ответить с цитированием
  #8 (permalink)  
Старый 16.03.2017, 13:50
Аватар для Stay_Strong
Аспирант
Отправить личное сообщение для Stay_Strong Посмотреть профиль Найти все сообщения от Stay_Strong
 
Регистрация: 14.10.2015
Сообщений: 37

ksa,
Я думаю, что вы напрасно смеетесь. Потому что многие учатся таким способом. У меня пока что вот что получается
window.onload = function() {

  function loadElements() {
    //Основные параметры
    var element = '.filter__item', //элементы к которым будет применен метод
        childrenElements = '.filter__option', //дочерние элементы, больше числа которых появляется кнопка раскрытия
        count = 3, //число, после которого появится раскрытие
        speed = 250, //скорость раскрытия блока по нажатию на кнопку показа
        textMore = '+ Показать все', //Текст для кнопки "Показать все"
        textLess = '- Скрыть'; //Текст для кнопки "Cкрыть"

    //Переменные, используемые в плагине
    var elList = document.querySelectorAll(element); //находим все элементы на странице, к которым нужно применить метод

    Array.prototype.forEach.call(elList, function(el, i) { //Обходим в цикле все элементы
        var countChildren = elList[i].querySelectorAll(childrenElements);
        if(countChildren.length > count) {
          //Создаем контейнер, куда будем перемещать все элементы, которые нужно скрыть.
          var container = document.createElement('div');
          container.className = 'loadContainer';
          //Присваиваем контейнер в наш элемент
          elList[i].appendChild(container);
          //Выбираем все элементы, которые будем скрывать
          for(var j = 0; j < countChildren.length; j++) {
            if(j > count - 1) {
              container.appendChild(countChildren[j]);
            }
          }
        }
    });

  }

  loadElements();

}
Ответить с цитированием
  #9 (permalink)  
Старый 16.03.2017, 14:25
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Stay_Strong, это и есть плагин?
Ответить с цитированием
  #10 (permalink)  
Старый 16.03.2017, 15:30
Аватар для Stay_Strong
Аспирант
Отправить личное сообщение для Stay_Strong Посмотреть профиль Найти все сообщения от Stay_Strong
 
Регистрация: 14.10.2015
Сообщений: 37

Нет, мне достаточно сложно сразу собирать плагин. Я реализую функционал. Потом создаю только объект default, и преобразую в плагин потом. Плагин можете посмотреть вот здесь мой (который на jquery).

А вообще принимаю любые советы по более правильной реализации структуры и оптимизации кода.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Auto resizing textarea на чистом JavaScript volshebnyi jQuery 1 16.09.2016 10:34
аналог ajaxupload на чистом js Гугл-мен Общие вопросы Javascript 1 04.11.2013 13:49
Есть ли в JavaScript аналог функции exec() из php? lorddarkside Общие вопросы Javascript 3 22.12.2010 12:37
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34