Какой из них более эффективен (т.е. быстрее):
$(elem).show();
или
$(elem).addClass(displayClass); // Where display class is "display: block;"
Или они идентичны?
Какой из них более эффективен (т.е. быстрее):
$(elem).show();
или
$(elem).addClass(displayClass); // Where display class is "display: block;"
Или они идентичны?
Это зависит от того, что вам нужно, они делают разные вещи:
$(elem).show();
- показывает элемент, восстанавливая display
от .hide()
или восстанавливая по умолчанию display
для элемента тип$(elem).addClass(displayClass);
- добавляет класс, всегда с определенным display
, не совсем восстанавливая то, что было там - это менее гибкоЧто быстрее? .addClass()
hands down, вы можете протестировать его здесь, просто работает намного меньше, чем .show()
does. Тем не менее, он не делает так много функций, поэтому он менее гибкий по причинам выше.
Нет, они абсолютно идентичны не.
Там большая разница между прямыми изменениями стилей стилей и "косвенными" изменениями путем изменения класса элемента, и это действительно должно быть довольно очевидным. Создавая совлокальный код между Javascript и CSS, изменения класса дают вам большую гибкость. Javascript управляет состоянием элементов, а CSS управляет фактическим эффектом этого состояния.
Методы show()
и hide()
удобны и легки, но (на мой взгляд) управление состоянием/внешним видом по имени класса действительно намного более мощным и удобным для пользователя способом. На самом деле вы всегда можете написать свои собственные небольшие плагины jQuery, чтобы добавлять/удалять классы, которые имеют значение для вашего приложения, чтобы избежать распространения самих имен классов через ваш код.
Они не идентичны; они работают совершенно по-другому. Они могут в вашем случае иметь тот же эффект, но не рассчитывают на это.
Например, addClass
может не сделать элемент видимым во всех случаях. Если у элемента есть другие стили, которые задерживают класс (например, CSS уровня ID или встроенные стили и т.д.), То добавление класса вообще не будет иметь никакого эффекта.
Кроме того, установка display:block
верна только для элементов, которые вы хотите отобразить в виде блока. Если у вас есть встроенные элементы (или, что еще хуже, таблицы), и вы пытаетесь отобразить их как блок, результаты, вероятно, не будут тем, что вы ожидаете.
Наконец, .addClass()
определенно включает в себя больше обработки для браузера, чем .show()
, поэтому вы не делаете вещи более легкими для своего сайта, используя его.
Короче говоря, если все, что вы пытаетесь достичь, используйте .show()
- это правильный способ jQuery.