- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Приветствую всех!
Появились сомнения в возможности сделать подобное в селекторе.
При клики в любом(это важно) месте div-а меняется его фон. Что нужно прописать в селекторе, чтобы исключить смену фона при клике по ссылкам "a href"?
Может другое есть решение, а то я прицепился к селекторам и ни в какую.
Сравнить объекты this и event.target
if(this === event.target) /* щелчок идет именно от родителя, а не от его потомков */
Ну или по колхозному
if(event.target.nodeType=='DIV')
значит по div, однако когда вы поменяете div на скажем nav, придется переписывать и тут
Что нужно прописать в селекторе
Разумеется все что выше делается в функции.
e.stopPropagation();
Это на все линки придется вешать.
А, ну да, совсем забыл, они же на жиквери так и делают, вообще не парятся. чего-то-там.each(и вперде)
Тогда еще пояснение - все что я выше написал справедливо для 1 функции слушателя на 1 объекте родителя - том самом div. Стандартный мини-контроллер.
не примет событие от <span>, <b>, <i>..
было бы лучше и более логично если бы присутствовал обработчик <a>
но, видимо, имеется ввиду просто переход по ссылке и тогда лучше запихать в обработчик div исключение для <a> че уж..
kostyanet, решение с target, как по мне, это лучший вариант. Благодарю Вас.
Если кто возьмёт идею, то тут есть минусы. Если в ссылке <a> есть элементы, то их тоже придётся указывать и "давить". Например <img>
---------- Добавлено 16.08.2015 в 22:05 ----------
e.stopPropagation();
Если я правильно понял, то Вы предлагаете делать второй обработчик на <a> и в нём stopPropagation() "давить" первый. Первый был на <div>.
Благодарю за идею. Не пробовал такой вариант, но возьму на вооружение.
---------- Добавлено 16.08.2015 в 22:11 ----------
RiDDi, Благодарю!
Реально под вечер туплю. Эта строчка красивее и быстрее моей
не примет событие от <span>, <b>, <i>..
Не понял ничего.
Дана ветка хтмля начинающаяся с div. Допустим у него есть id
document.getElementById('foo').addEventListener('click',func);
теперь куда бы не щелкнули, на любой дочерний элемент, а, и, спан, б и тп - событие всплывет до div'а где и спалится функцией func.
Если надо сегрегировать конкретно ссылки, то
Ну и вообще что угодно можно проверить, поскольку обрабатывается событие контейнера.
---------- Добавлено 17.08.2015 в 07:56 ----------
Если кто возьмёт идею, то тут есть минусы.
html вообще это один большой минус.
Вы рассуждаете семантически, типа вот ссылка, в ней там барахло может быть, картинки, еще теги - какая разница. Ну да, а для браузера есть разница. Он должен вам показать что щелкнуто, а вы уже можете решать что дальше делать. Так чтобы находить нужный элемент вверх по дереву пишется простейшая функция
По-другому вам придется да, все перечислять.
---------- Добавлено 17.08.2015 в 08:03 ----------
В CSS вроде бы есть какие-то атрибуты делающие элемент "прозрачным" для щелчка. Один раз поискал как-то, запомнил только это "вроде бы есть", то есть не пашут они, говорят.
... Так чтобы находить нужный элемент вверх по дереву пишется простейшая функция ...
Сейчас голова свежая и исключить вложенные элементы, в данном примере, можно jquery функцией без перечислений и самописной:
Вот теперь понимаю, что в $селекторе.click() такие условия невозможно было задать.
А, ну да, совсем забыл, они же на жиквери так и делают...Стандартный мини-контроллер.
Можно подумать что навешивание всюду MV[C]* чем-то лучше тотального jquery и не провоцирует появление излишеств.
Это не mvc, это html. В нем нет правды. Хорошо что текстовая нода не кликабельна. Все остальное хотели и сделали кликабельным. Потому что да, надо. Тогда и пришлось рекурсить ветку, потому что иначе никак.
в данном примере, можно jquery функцией без перечислений и самописной:
Это религия.
Жикверя не может всего предусмотреть и все равно накапливается даже небольшая библиотека, с применением той же жиквери, конечно.
У меня другая религия и повторное использование текстового идентификатора в моей церкви считается грехом. :) А потому что как иначе, ей же надо css подавать, этой parents() да? Туда же не засунешь комбинацию this и "а", который тоже два раза. В общем это мелочи, конечно, но из них и состоит культура.
Это религия.
Это логика.
У меня другая религия и повторное использование текстового идентификатора в моей церкви считается грехом. :) А потому что как иначе, ей же надо css подавать, этой parents() да? Туда же не засунешь комбинацию this и "а", который тоже два раза. В общем это мелочи, конечно, но из них и состоит культура.
Ограничение путешествия по дереву вверх не является повтором "использование текстового идентификатора". Это новая задача внутри первой с совпадающими условиями. И мой логический атеизм поощряет минимализм в скриптовых конструкциях. Он же считает jQuery не бескультурной js панацеей, а обычным инструментом.