Заменить find для оптимизации в IE8?

У меня есть рекурсивная функция jQuery, которая имеет что-то вроде этого:

parentItem.find('> div:first-child > span.c-checkbox > input[type="checkbox"]');

Это отлично работает в Chrome, Firefox, Safari и даже IE9. В IE8 и ниже он работает ужасно медленно (15+ секунд).

В статье я обнаружил, что IE8 плохо справляется с "find": http://ethermuse.blogspot.com/2011/07/jquery-find-slow-in-ie8.html. Я не совсем понимаю концепцию. Может ли кто-нибудь порекомендовать способ заставить эту работу правильно работать в IE8?

РЕДАКТИРОВАТЬ: Я попытался заменить фрагмент кода этим в своем приложении, и мне кажется, что я заметил улучшение:

parentItem.children("div:first-child").children("span.c-checkbox").children("input[type=checkbox]")

Идентичны ли селекторы и можно ли это измерить?


person TruMan1    schedule 28.02.2012    source источник
comment
замена находки с детьми побрилась уже секунд 10!   -  person TruMan1    schedule 01.03.2012


Ответы (2)


Постарайтесь уменьшить количество дополнительных селекторов внутри find ().

Попробуй это:

parentItem.find('input:checkbox');
person Greg Franko    schedule 28.02.2012
comment
Согласен, это выглядит ужасно сложным селектором. При необходимости установите флажок для класса и выберите его напрямую. Или, что еще лучше, используйте вместо этого идентификатор. - person shanabus; 28.02.2012

это не find проблема, но вам следует оптимизировать выражение селектора.

Лучше всего использовать id, потому что jQuery напрямую вызывает document.getElementById для выбора узла.

если вы используете такие вещи, как $('.class') $(input[name=somename]), для этого не существует прямого необработанного метода javascript, и jQuery будет сканировать все узлы, чтобы найти, какой узел вы хотите, что вызывает проблемы с производительностью.

чтобы решить вашу проблему, вам лучше указать идентификатор для вашего элемента.

OR,

возможно, вы можете вставить свой HTML, чтобы я мог написать для вас лучший селектор :)

person Ya Zhuang    schedule 28.02.2012