Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как оптимизировать данный код (https://javascript.ru/forum/misc/64093-kak-optimizirovat-dannyjj-kod.html)

Stepan 19.07.2016 17:01

Как оптимизировать данный код
 
Приветствую,
есть код который хочу оптимизировать, подскажите пожалуйста как лучше сделать, есть идея хранить $(item).next() $(item).prev() как переменные и использовать их. возможно ли сделать что то получше? интересует именно скорость работы, спасибо
MultiPicker.updateClasses = function (item, className) {
		if ($(item).hasClass(className)) {
			if ($(item).next().hasClass(className) && $(item).prev().hasClass(className)) {
				if ($(item).next().next().hasClass(className)) {
					$(item).next().removeClass();
					$(item).next().addClass(className + " center-side");
				} else {
					$(item).next().removeClass();
					$(item).next().addClass(className + " right-side");
				}
				if ($(item).prev().prev().hasClass(className)) {
					$(item).prev().removeClass();
					$(item).prev().addClass(className + " center-side");
				} else {
					$(item).prev().removeClass();
					$(item).prev().addClass(className + " left-side");
				}
				$(item).removeClass();
				$(item).addClass("active center-side");
			} else if ($(item).next().hasClass(className) && !$(item).prev().hasClass(className)) {
				if ($(item).next().next().hasClass(className)) {
					$(item).next().removeClass();
					$(item).next().addClass(className + " center-side");
				} else {
					$(item).next().removeClass();
					$(item).next().addClass(className + " right-side");
				}
				$(item).removeClass();
				$(item).addClass("active left-side");
			} else if (!$(item).next().hasClass(className) && $(item).prev().hasClass(className)) {
				if ($(item).prev().prev().hasClass(className)) {
					$(item).prev().removeClass();
					$(item).prev().addClass(className + " center-side");
				} else {
					$(item).prev().removeClass();
					$(item).prev().addClass(className + " left-side");
				}
				$(item).removeClass();
				$(item).addClass(className + " right-side");
			}
		} else {
			if ($(item).next().hasClass("right-side")) {
				$(item).next().removeClass();
				$(item).next().addClass(className);
			}
			if ($(item).prev().hasClass("left-side")) {
				$(item).prev().removeClass();
				$(item).prev().addClass(className);
			}
			if ($(item).prev().hasClass("center-side")) {
				$(item).prev().removeClass();
				$(item).prev().addClass(className + " right-side");
			}
			if ($(item).next().hasClass("center-side")) {
				$(item).next().removeClass();
				$(item).next().addClass(className + " left-side");
			}
		}


полный код здесь https://github.com/styopdev/multiPic...multipicker.js

Spass 19.07.2016 17:03

как минимум можно писать так
$(item).next().removeClass().addClass(className + " left-side");



Всей этой лапши можно избежать если написать толковый css который будет все эти ситуации учитывать, и менять только верхний уровень.

Stepan 19.07.2016 17:10

Spass,
Спасибо большое, если у кого еще есть идеи буду рад помощи

Stepan 19.07.2016 17:17

Spass,
Классы меняются приклике и hover-е, как тут http://styopdev.github.io/multiPicker/
То есть вы предлагаете всем элементам добавить класс к примеру .active а потом уже в css разбираться кто первый кто последний при помощи :first :last?

nerv_ 19.07.2016 17:22

Цитата:

Сообщение от Stepan
Как оптимизировать данный ко

про переменные слышал? :)

Spass 19.07.2016 17:31

Цитата:

Сообщение от Stepan
Классы меняются приклике и hover-е, как тут http://styopdev.github.io/multiPicker/
То есть вы предлагаете всем элементам добавить класс к примеру .active а потом уже в css разбираться кто первый кто последний при помощи :first :last?

Да, здесь не все так просто, подумаю над этим на досуге :)

Stepan 19.07.2016 17:38

nerv_,
Вопрос до конца слабо было прочитать?

Stepan 19.07.2016 17:38

Spass,
Спасибо :)

nerv_ 19.07.2016 17:41

Цитата:

Сообщение от Stepan
Вопрос до конца слабо было прочитать?

А что там читать? Твой код говорит за тебя :)

Spass 19.07.2016 17:48

.checklist li.active:first-child,
.checklist li:not(.active) + li.active {
    border-bottom-right-radius: 0;
    border-right: 2px solid transparent;
    border-top-right-radius: 0;
}



вместо left-side :D


Часовой пояс GMT +3, время: 08:46.