#jquery
#jquery
Вопрос:
Совершенно новый для jQuery. Я внедрил приведенную ниже функцию на страницу, которую я разрабатываю, и то, что я считал относительно простым jQuery, оказывается проблематичным.
$(document).ready(function(){
var leftnav = $("#leftnav ul li");
leftnav.hover(function(){
$(this).children('ul').stop(true, true).slideDown();
},function(){
$(this).children('ul').stop(true, true).slideUp();
});
});
В принципе, это великолепно работает в Chrome и Opera — красиво, плавно, быстро. В Firefox и IE8 он работает как собака — отрывисто, медленно, как будто на нем костюм из грязи. Как я уже сказал, я совершенно новичок в jQuery — это первый раз, когда я пытался внедрить что-либо на веб-страницу. Я пробовал то же самое, используя mouseenter и mouseleave, но разница невелика.
Я бы ожидал проблем с IE8, но немного расстроен тем, что firefox создает мне проблемы, поскольку я всегда клялся этим. Должен ли я просто принять это и согласиться?
Спасибо
РЕДАКТИРОВАТЬ: Хорошо, мне удалось немного ускорить процесс. Несмотря на то, что производительность Lightning Chrome все еще не улучшилась, IE8 и firefox теперь являются тем, что я бы назвал приемлемым. Я получил несколько советов с этой превосходной страницы — http://www.artzstudio.com/2009/04/jquery-performance-rules
Я просто сделал свой параметр selector более конкретным, указав ‘#leftnav ul’ его собственный идентификатор в моем markup- #list, а затем сославшись на него в моем коде jQuery. Итак,
var leftnav = $("#leftnav ul li");
становится:
var leftnavUl = $("#list li");
Насколько я понимаю, это позволяет jQuery более эффективно оттачивать рассматриваемый элемент.
Используя console.time в firebug, я заметил увеличение скорости с ~ 15 мс до ~ 10 мс для каждой операции отката, просто за счет большей конкретности в моих селекторах.
Как я уже сказал, не такой качественный, как Chrome, но становится лучше!
Ответ №1:
Если он не выдает ошибок или сбоев, то, вероятно, вы мало что можете сделать.
Не похоже, что в коде есть какие-либо массивные циклы или что-либо, что могло бы вызвать его задержку, возможно, это просто то, как браузеры обрабатывают jQuery.
Почему бы вам не использовать:
$(«#leftnav ul li ul»).наведите курсор (… ect …)
Таким образом, вы можете отключить «дочерний» вызов и переменную. Это если только вы не используете их для чего-то другого.
Комментарии:
1. Спасибо за предложение — к сожалению, я уже перепробовал все комбинации прямого обращения к элементу, использования или неиспользования var и использования или не использования дочернего вызова, и это ничего не изменило. Интересно, может ли это быть как-то связано с моей структурой DOM… У кого-нибудь из экспертов jQuery есть какие-либо предложения по этому поводу?
2. можете ли вы опубликовать ссылку на демонстрационную версию?