-
-
Save sapegin/3103107 to your computer and use it in GitHub Desktop.
/** | |
* Controls | |
* | |
* <span data-trigger="slider-next" data-recipient=".portfolio">Next</span> | |
*/ | |
$(document).click(function(e) { | |
var target = e.target; | |
if (target.getAttribute('data-trigger') && target.getAttribute('data-recipient')) { | |
target = $(target); | |
$(target.data('recipient')).trigger(target.data('trigger')); | |
e.preventDefault(); | |
} | |
}); |
Спасибо за предложение! Когда столкнусь с такой разметкой, попробую.
Да, универсальность съедает производительность. Можешь потыкать тест. Но, деградация не такая уж и критическая, чтобы отвергать этот вариант.
Ну да, не такая уж большая разница. Но ещё надо бы добавить вариант, где target.getAttribute('data-trigger')
тоже на jQuery. Тогда разница должна быть ещё меньше.
В этом нет нужды. Селекторы обслуживает Sizzle, который не обращается к jQuery.
Можно ещё попробовать расширить возможности селекторов jQuery и матчить елементы не по атрибутам, а сразу по связанным с ним данным. Как это скажется на производительности кода я, опять же, достоверно сказать не могу.
А Сизл, по-твоему, магию использует? :)
Нет, что ты. Я хотел сказать, что $(el).attr("data-trigger")
и $("[data-trigger]")
обрабатываются абсолютно не связанными друг с другом участками кода.
Но оба создают объект jQuery, который не создаётся в исходном варианте.
Эта штука не будет работать с разметкой типа:
из-за того, что инициатором события будет em.
Гораздо лучше что-то типа такого:
…ну, и как бы короче :) Я только не ручаюсь за производительность. Возможно матчинг по атрибутам — не сильно быстрая штука. Нужно делать бенчмарк.