Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.09.2017, 14:31
Аватар для void()
Профессор
Отправить личное сообщение для void() Посмотреть профиль Найти все сообщения от void()
 
Регистрация: 11.08.2017
Сообщений: 208

Шаблон для своей jQuery
Шаблон для своей jQuery:

function $(s){ return new Q(document.querySelectorAll(s)); }

function Q(x){
    this.x = x;
    this.toggle = function(v, c){
        for(var i = 0; i < this.x.length; i++){
            this.x[i].addEventListener(v, function(){
                this.classList.toggle(c);
            });
        }
        return this;
    }
}


Используется так:

$('.class').toggle('click', 'class-active');


Остается только добавить методов. Например:

this.on = function(v, f){
        for(var i = 0; i < this.x.length; i++){
            this.x[i].addEventListener(v, f);
        }
        return this;
    }


Теперь можно использовать так:

$('.class').toggle('click', 'class-active').on('click', function(){alert('1');});


Ответить с цитированием
  #2 (permalink)  
Старый 23.09.2017, 14:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

void(),
https://javascript.ru/forum/project/...tml#post438821
Ответить с цитированием
  #3 (permalink)  
Старый 23.09.2017, 14:43
Аватар для void()
Профессор
Отправить личное сообщение для void() Посмотреть профиль Найти все сообщения от void()
 
Регистрация: 11.08.2017
Сообщений: 208

рони,
Ничеси, надо разобраться)
Ответить с цитированием
  #4 (permalink)  
Старый 23.09.2017, 22:44
Аватар для void()
Профессор
Отправить личное сообщение для void() Посмотреть профиль Найти все сообщения от void()
 
Регистрация: 11.08.2017
Сообщений: 208

Rise,
Спасибо за подсказку. Попробую переделать через прототипы и еще поизучаю вашу библиотеку на предмет каких-то идей. Еще я думаю, тут есть проблема с циклами, которые будут все время копироваться, почти в каждом методе, что не очень круто. И, наверно, не лучшая кроссбраузерность. Хотя последний фактор меня пока трогает мало.
Ответить с цитированием
  #5 (permalink)  
Старый 24.09.2017, 00:00
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Rise,
а какой паттерн в твоей либе?
Ответить с цитированием
  #6 (permalink)  
Старый 24.09.2017, 00:19
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Сообщение от Rise
паттерн чего?
кода. В своей либе использую паттерн "Модуль".
Ответить с цитированием
  #7 (permalink)  
Старый 24.09.2017, 08:32
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Rise,
Design Pattern
Ответить с цитированием
  #8 (permalink)  
Старый 24.09.2017, 17:46
Аватар для void()
Профессор
Отправить личное сообщение для void() Посмотреть профиль Найти все сообщения от void()
 
Регистрация: 11.08.2017
Сообщений: 208

Перенести методы в прототип оказалось просто:
Шаблон:

function $(selector){ return new Q(document.querySelectorAll(selector)); }

class Q { 
	constructor(selector){ this.selector = selector; }

	toggle(event, newSelect){
		for(var i = 0; i < this.selector.length; i++){
			this.selector[i].addEventListener(event, function(){
				this.classList.toggle(newSelect);
			});
		}
		return this;
	}
}


Как использовать:
$('#wrapper .class').toggle('click', 'class-active');


А вот избавиться от циклов пока не получается.
Как думаете вообще, можно ли такой подход уже использовать где-нибудь на личном проекте? Или тут еще есть серьезные дефекты?

Последний раз редактировалось void(), 24.09.2017 в 17:51.
Ответить с цитированием
  #9 (permalink)  
Старый 24.09.2017, 18:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от void()
А вот избавиться от циклов пока не получается.
цикл можно заменить на делегирование(но нужно ли?), или вам известен другой способ?
Ответить с цитированием
  #10 (permalink)  
Старый 24.09.2017, 18:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

void(),
вынос цикла в отдельный метод ... может кто-то предложит свой вариант ...
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .hot.class-active{
    background-color: #3366FF;
  }
  .red {
    background-color: #FF0000;
  }

   .hot{
         border: 1px dashed Gray; padding: 5px; height: 100px; width: 100px;
    }
  </style>


</head>

<body> <style type="text/css">


  </style>
 <div class="hot">test</div>
 <div class="hot red">test</div>
 <div class="hot">test</div>
<script>
"use strict"
function $(selector){ return new Q(document.querySelectorAll(selector)); }

class Q {
constructor(selector){ this.selector = selector; }

toggleClass(newSelect,event) {
    var fn = function() {
        this.classList.toggle(newSelect)
    };
    return this.forEach(fn, event)
};

forEach(fn, event) {
    [].forEach.call(this.selector, function(item) {
        event ? item.addEventListener(event, fn.bind(item)) : fn.bind(item)()
    });
    return this
};

css(data, event) {
    var fn = function() {
        var item = this;
        Object.keys(data).forEach(function(key) {
            item.style[key] = data[key]
        })
    };
    return this.forEach(fn, event)
};


}
$('.hot').toggleClass('red').css({"color" : "#66FF00", width : "200px"}).toggleClass('class-active','click');
  </script>
</body>
</html>

Последний раз редактировалось рони, 24.09.2017 в 18:37.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery для загрузки страницы в <div> Dr.Holerik jQuery 12 11.10.2016 17:36
Работа для знатока jQuery virtualbrest Работа 0 24.07.2013 16:05
Темы для Jquery UI wUI jQuery 0 07.04.2013 18:09
Не работает форма для сбора информации на jquery Ranetka jQuery 10 13.10.2012 14:01