Заменить «найти» для оптимизации в IE8? - PullRequest
2 голосов
/ 28 февраля 2012

У меня есть рекурсивная функция 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?

EDIT: Я попытался заменить фрагмент кода этим в моем приложении, и я думаю, что заметил улучшение:

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

Являются ли селекторы идентичными и есть ли способ, которым я могу это измерить?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

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

Попробуйте:

parentItem.find('input:checkbox');
0 голосов
/ 28 февраля 2012

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

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

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

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

OR

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...