Первый способ, $("div#target span.green").on()
, привязывает обработчик щелчка непосредственно к диапазону (ам), который соответствует селектору в момент выполнения кода. Это означает, что если другие диапазоны будут добавлены позже (или их класс будет изменен, чтобы соответствовать), они пропустили и не будут иметь обработчик щелчка. Это также означает, что если впоследствии вы удалите «зеленый» класс из одного из диапазонов, его обработчик кликов будет продолжать работать - jQuery не отслеживает, как был назначен обработчик, и проверяет, совпадает ли селектор.
Второй способ, $("div#target").on()
, привязывает обработчик щелчка к совпадающим элементам (ам), которые совпадают (опять же, с теми, которые совпадают в данный момент), но когда щелчок происходит где-то в элементе div, функция обработчика запускаться только в том случае, если щелчок произошел не только в элементе div, но и в дочернем элементе, который соответствует селектору во втором параметре .on()
, "span.green". Сделано так, что не имеет значения, когда были созданы эти дочерние промежутки, щелчок по ним все равно запускает обработчик.
Так что для страницы, которая динамически не добавляет или не изменяет свое содержимое, вы не заметите разницы между этими двумя методами. Если вы динамически добавляете дополнительные дочерние элементы, второй синтаксис означает, что вам не нужно беспокоиться о назначении им обработчиков кликов, поскольку вы уже сделали это один раз для родительского элемента.