Я хочу динамически стилизовать все элементы данного селектора в моей DOM. Я вижу более или менее два пути. В приведенном ниже примере я использую элемент p
и его атрибут text-align
, но меня больше интересуют плюсы и минусы двух возможных способов сделать это, чем я в специально абзацах, выравнивающих текст.
1. Встроенный (для элемента) стили
var nodes = document.getElementsByTagName('p');
Array.prototype.forEach.call (nodes, function (node) {
node.style.textAlign = "center";
});
2. Стили
var sheet = (function() {
// Create the <style> tag
var style = document.createElement("style");
// WebKit hack :(
style.appendChild(document.createTextNode(""));
// Add the <style> element to the page
document.head.appendChild(style);
return style.sheet;
})();
sheet.insertRule("p { text-align: center; }");
Как правило, я бы пошел по пути встроенных стилей, поскольку он кажется более простым и гарантирует, что изменение стиля переопределит существующие таблицы стилей. Но мне приходит в голову, что для одного: иногда не переопределение таблиц стилей может быть предпочтительным, а для двоих: может быть больше производительности изменить один элемент style
, чем неизвестное количество элементов p
. Но это только мое предположение.
Производительность была бы такой, если бы когда-либо была ситуация, когда применение встроенных стилей для каждого отдельного элемента было бы лучше, чем создание таблицы стилей? Предполагая, что ответ может зависеть от того, сколько элементов я стилю, в какой-то момент создание таблицы стилей становится более эффективным?
EDIT: Чтобы выяснить, почему я задаю этот вопрос, я немного объясню, почему я спрашиваю: недавно я включил несколько хакеров JS, которые я часто копировал и адаптировал между проектами в набор многоразовых модулей CommonJS. Они делают такие вещи, как установка всех элементов заданного селектора той же высоты или ширины, что и самый высокий или самый широкий из наборов в ситуациях, когда измерение самого высокого или самого широкого может быть изменено при изменении размера окна или других триггеров.
Вот сообщение в блоге об этом: http://davejtoews.com/blog/post/javascript-layout-hacks
Вот репозитории GitHub для модулей:
В этот момент все эти модули используют встроенные стили, но я думаю о переключении их на таблицы стилей. Я не мог найти хороший ответ о плюсах и минусах любого подхода, поэтому я разместил здесь этот вопрос.