Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Компактно переписать функцию (https://javascript.ru/forum/misc/67753-kompaktno-perepisat-funkciyu.html)

AlexTrader 06.03.2017 15:50

Компактно переписать функцию
 
Здравствуйте форумчане! Подскажите пожалуйста, как более компактно можно переписать функцию:
$(document).mouseup(function (e) { 
            var div = $("#treeview");
            var div1 = $("#CategoryTitle"); 
            var div2 = $("#treeviewDropdownBtn"); 
            if (!div.is(e.target) && div.has(e.target).length === 0) {
                if (!div1.is(e.target) && div1.has(e.target).length === 0) {
                    if (!div2.is(e.target) && div2.has(e.target).length === 0) {
                        kendoWindow.data("kendoWindow").close();
                    }
                }
            }
        });

AlexTrader 06.03.2017 15:51

Функция делает следующее: если был клик не по указанным дивам, то окно закрывается

ksa 06.03.2017 15:56

Цитата:

Сообщение от AlexTrader
если был клик не по указанным дивам, то окно закрывается

Как вариант...
$(document).mouseup(function (e) { 
	var div = $("#treeview, #CategoryTitle, #treeviewDropdownBtn"); 
	if (!div.is(e.target) && div.has(e.target).length === 0) {
		kendoWindow.data("kendoWindow").close();
	};
});

ksa 06.03.2017 15:57

Цитата:

Сообщение от AlexTrader
Подскажите пожалуйста, как более компактно можно переписать функцию

Если этим элементам дать уникальный класс - селектор будет еще короче...

laimas 06.03.2017 17:25

Цитата:

Сообщение от ksa
элементам дать уникальный класс

Как это?

рони 06.03.2017 17:32

AlexTrader,
$(function() {
    $("document").on("click", function(e) {
        $(e.target).closest("#treeview, #CategoryTitle, #treeviewDropdownBtn").length
        || kendoWindow.data("kendoWindow").close()
    })
});

рони 06.03.2017 17:35

Цитата:

Сообщение от laimas
Как это?

было
var div = $("#treeview, #CategoryTitle, #treeviewDropdownBtn");

стало
var div = $(".noClose");

:-?

laimas 06.03.2017 18:03

Цитата:

Сообщение от рони
стало
var div = $(".noClose");

Ну это понятно, но какое отношение имя класса имеет к уникальности, если оно не может быть уникальным?

Если поиск по классу, то будут обшарены все элементы, а не только первый попавшийся в случае с ID. Поэтому при поисках по классу либо уточняют что ищут, либо указывают контекст. Вот я и спросил, как такое возможно - упростить и выгадать? :)

рони 06.03.2017 18:11

laimas,
не понимаю о чём вы.

laimas 06.03.2017 18:20

Цитата:

Сообщение от ksa
Если этим элементам дать уникальный класс - селектор будет еще короче...

Да, селектор будет короче. Но имя класса для браузера не является уникальным значением, и при поиске по имени класса он будет проверять все, без исключения, элементы документа. Можно не обременять его поиском среди всех, а только, например среди параграфов - p.class-name.

Другими словами, вряд ли можно быть уверенным в том, что заменив селектор "#treeview, #CategoryTitle, #treeviewDropdownBtn" на ".noClose" мы выиграем.


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