Компактно переписать функцию
Здравствуйте форумчане! Подскажите пожалуйста, как более компактно можно переписать функцию:
$(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(); } } } }); |
Функция делает следующее: если был клик не по указанным дивам, то окно закрывается
|
Цитата:
$(document).mouseup(function (e) { var div = $("#treeview, #CategoryTitle, #treeviewDropdownBtn"); if (!div.is(e.target) && div.has(e.target).length === 0) { kendoWindow.data("kendoWindow").close(); }; }); |
Цитата:
|
Цитата:
|
AlexTrader,
$(function() { $("document").on("click", function(e) { $(e.target).closest("#treeview, #CategoryTitle, #treeviewDropdownBtn").length || kendoWindow.data("kendoWindow").close() }) }); |
Цитата:
var div = $("#treeview, #CategoryTitle, #treeviewDropdownBtn"); стало var div = $(".noClose"); :-? |
Цитата:
Если поиск по классу, то будут обшарены все элементы, а не только первый попавшийся в случае с ID. Поэтому при поисках по классу либо уточняют что ищут, либо указывают контекст. Вот я и спросил, как такое возможно - упростить и выгадать? :) |
laimas,
не понимаю о чём вы. |
Цитата:
Другими словами, вряд ли можно быть уверенным в том, что заменив селектор "#treeview, #CategoryTitle, #treeviewDropdownBtn" на ".noClose" мы выиграем. |
laimas,
будет уже выигрыш по простоте добавления/удаления элемента -- ненадо будет ничего менять в скрипте. |
Цитата:
|
laimas,
надо делать тест :) что быстрее? $(e.target).closest("#treeview, #CategoryTitle, #treeviewDropdownBtn") или $(e.target).closest(".noClose") |
Цитата:
|
laimas,
не понимаю ваших сообщений в этой теме, для меня однозначно $(e.target).closest(".noClose") лучше, если вам удобно иначе, дело ваше. |
:)
Я вот о чем. В данном случае, с closest(), пофиг как ищется по классу ли или по ID, метод определяет действия - нашли первое совпадение и успокоились. То есть ну выиграли только в сокращении записи, не более. А теперь представим, что речь идет о наборе именно уникальных элементов. Пусть этот набор размещен так: <body><div><div id=a1 class=as><div id=a2 class=as><div id=a3 class=as> и требуется получить этот набор являющийся родителями, то есть используем .parents(). Если в этом случае искать по селектору класса .parents('.as'), то будут опрошены элементы вплоть до body, а если по id, .parents('#a1, #a2, #a3'), то поиск остановится после нахождения третьего в наборе, ибо ID уникально и нечего более искать выше. |
laimas,
в обоих случая будет искать до document не останавливась |
Цитата:
|
laimas,
так устроен parents --- нужен break тогда parentsUntil |
Цитата:
|
laimas,
Цитата:
|
laimas,
parents идёт по дереву вверх (запоминая нужное), parentsUntil идёт по дереву вверх до первого ограничителя сколько бы их небыло (запоминая всех) |
Цитата:
Надо исходник JQ посмотреть по данному поводу, что-то мне не верится, чтобы такая глупость была заложена в метод. :) |
laimas,
не вижу никакой глупости |
Цитата:
Ну как это понимать, если есть набор 1, 2, 3, и зная, что каждое значение набора уникально, заказав найти 2, найдя его вторым, проверять еще и 3? На стороне сервера "чувствительная" область, это база, и если запрос нашел по уникальному значению, то далее он искать не будет. Это разумно, иначе любой сервер ляжет только от одних запросов. На стороне клиента продолжать поиск, найдя элемент по уникальному значению, также большая расточительность ресурсов. Поэтому и существуют понятие уникальность, и я сомневаюсь, что здесь <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script> $(function() { $('input').change(function() { alert(this.checked ? $('.as').text() : $('#a1').text()) }) }); </script> </head> <body> <p id="a1" class="as">1</p> <p id="a2" class="as">2</p> <p id="a3" class="as">3</p> <input type="checkbox" /> </body> </html> при поиске по ID опрашивает также и '#a2', и '#a3', фильтруя полученное в для выбора нужного, а не прекращает поиск после найденного '#a1'. Также поступит и браузер, смысла то ведь нет, он то знает, что ID есть значение уникальное и он его уже нашел. Именно исходя из уникально/не уникально, поиск по классу лучше конкретизировать, чтобы не расточать зря ресурсы - не .as, а p.as. В противном случае я буду разочарован и глупым поведением браузера, и его подспорьем - Javascript. :) |
laimas,
извини, но я пас, не понимаю ход твоих мыслей, воздержусь от дальнейших комментариев. |
Цитата:
Обязали найти в подъезде 2, на втором этаже, среди 4-х квартир, жильца Петрова. Знаем, что таковую фамилию в данной дислокации имеет только один человек, найдя его, нужно продолжать его искать? Если да, то какой в этом смысл? :) |
Цитата:
|
Цитата:
|
Цитата:
|
Да кто же их, буржуев, разберет - улыбаются и руку жмут, а за улыбкой коварный спрут.
Товарищ! Не ведись на буржуазную хрень! 14 февраля - обычный день! ;) |
Цитата:
|
|
Не на то держите курс, ребята. :D
|
Цитата:
Буржуи, мать их.... :) |
Часовой пояс GMT +3, время: 16:46. |