То, что у вас есть внутри вашей функции изменения, должно быть достаточно эффективным, хотя, если вы знаете, что элемент, который вы хотите, является прямым родителем , вам следует использовать .parent () вместо .parents (). Как уже говорили другие люди, если вы не знаете, является ли он прямым родителем, используйте .closest () вместо .parents ().
Теоретически, вы можете использовать this.parentNode
, чтобы получить родителя - независимо от его имени узла или класса - с собственным обходом DOM (то есть без использования jQuery), и это может быть немного быстрее. Тем не менее, вам нужно будет написать свои собственные проверки, чтобы убедиться, что имена узлов и классов совпадают, поэтому любые ваши выгоды, вероятно, будут снова потеряны. Это в основном то, что jQuery делает в любом случае, и jQuery уже очень сильно оптимизирован.
Ваш .live
селектор $("div#panel-frame div.panel.txt select.fontsize")
, вероятно, больше беспокоит с точки зрения скорости. .live()
работает, назначая событие элементу тела, а затем наблюдая за целями событий, когда они всплывают. Поэтому, когда какое-либо событие «изменения» попадает в тело, jQuery должен проверить, возникло ли оно при чем-то, совпадающем с 'div#panel-frame div.panel.txt select.fontsize'
, что является очень медленной операцией, особенно в старых браузерах.
Вероятно, было бы быстрее просто связать .live()
с $ ('select.fontsize'), а затем проверить, является ли элемент select именно тем типом, который вам нужен в самом обработчике событий. Таким образом, jQuery может использовать встроенную в браузер функцию getElementsByTagName, которая является быстрой операцией. А еще лучше, дайте вашим select.fontsize
элементам более конкретное имя класса, чтобы вы заранее знали, что они вам нужны.