1
Я работаю на веб-странице с большим количеством таблиц. Сценарий JQuery обрабатывает каждую строку и решает, какой стиль CSS должен быть применен к ней. Я использую этот фрагмент для применения класса к ячейке таблицыПрименение класса к элементу - JQuery
$myElem.parents('td').eq(0).attr('class', 'requiredClass');
Функционально, он работает как ожидалось. Однако в IE7.0 для этого требуется 16 мс. Учитывая количество строк на странице, это добавляется довольно быстро, по крайней мере, через полсекунды.
Как это сделать быстрее?
является селектор должен быть «получить главный родительский
Структура таблицы что-то вроде этого:
см. мой ответ для наиболее эффективного способа сделать это - http://stackoverflow.com/questions/1399893/applying-class-to-an-element-jquery/1400087#1400087 –
ответ
В свете Вашего комментария в вопросе, то это должно быть самым производительным
Это использует
parent()
вместо изparents()
, бывший только смотрит на на родительский, последний смотрит на всех родителей, но исключает корневой узел.<td>
, скорее всего, также является избыточным вparent()
, поскольку он действует, чтобы отфильтровать те родительские узлы, которые не являются элементом<td>
. Поскольку вы обрабатываете каждую строку за раз, я бы предположил, что вы можете гарантировать, что родитель в каждом случае равен<td>
, и поэтому я тоже удалю этот фильтр. Таким образом, становитсяЭто может быть еще быстрее, если вместо обработки каждой строки в то время, вы можете определить набор строк, которые должны иметь определенный класс применяется к
<td>
в вопросе, а затем выдать один селектор для добавления класса. Это может быть невозможно, это зависит от проверки, но, тем не менее, это просто мысль.EDIT:
Вы говорите, что вам нужно удалить неизвестный класс перед добавлением нового, но не знаете, что имя класса будет в каждом конкретном случае. Вызов метода removeClass() без параметра string name будет удалять все классы. Если вы не знали, Elements может иметь несколько классов, каждый из которых разделен пробелом, например
<td class="class1 class">
.Команда addClass() jQuery гарантирует, что каждое добавленное новое имя класса будет отделено от любого другого пробелом. Таким образом, селектор может выглядеть какисточник
2009-09-09 14:30:09
Попробуйте использовать метод addClass.
И используйте removeClass, если вы хотите его удалить.
Проблема может заключаться в том, что обработка класса как атрибута может быть не быстрой в IE (это моя догадка, поскольку я не использую IE).
источник
2009-09-09 14:06:06 NawaMan
попробовать
источник
2009-09-09 14:06:33 gabtub
Элемент уже имеет css класс, который неизвестен до выполнения этого оператора. Итак, теоретически я должен сначала сделать removeClass, а затем addClass. Тем не менее, я не знаю названия класса, чтобы сделать removeClass – Nick
Это чище, но будет еще медленнее. – bobince
@unknown - вызов removeClass() без параметра classname удалит все классы :) –
Использование addClass() method, он добавляет указанный класс (ы) к каждому из набора совпавших элементов.
источник
2009-09-09 14:12:53 ranonE
Элемент уже имеет класс css, который неизвестен до выполнения этого оператора. Итак, теоретически я должен сначала сделать removeClass, а затем addClass. Тем не менее, я не знаю имя класса, чтобы сделать removeClass – Nick
Его не обязательно нужно удалить первый класс. Вы можете иметь более одного класса, определенного для элемента. 'asdf' будет выглядеть как ** как ** 'external_link', так и' highlight'. – voyager
Я думаю, что ваша проблема связана с вызовом функции
eq
. Кажется, вам нужен только первыйtd
, поэтому ниже это гораздо более подходящий селектор. Я также использую функцию addClass установить имя класса, в отличие от использованияattr
источник
2009-09-09 14:25:33
Элемент уже имеет класс css, который неизвестен до выполнения этого оператора. Итак, теоретически я должен сначала сделать removeClass, а затем addClass. Тем не менее, я не знаю имя класса, чтобы сделать removeClass – Nick
И когда я использую $ myElem.parents ('td: first'). Attr ('class', 'requiredclass'); Я не вижу улучшения в производительности. – Nick
Не обязательно удалить первый класс. Вы можете иметь более одного класса, определенного для элемента. 'asdf' будет выглядеть как 'external_link' и' highlight'. – voyager
Смежные вопросы