Как проверить, существует ли правило css
Мне нужно проверить, существует ли правило CSS, потому что я хочу выпустить некоторые предупреждения, если файл CSS не включен.
Каков наилучший способ сделать это?
Я мог бы фильтровать через window.document.styleSheets.cssRules
, но я не уверен, что это кросс-браузер (плюс я замечаю, что Qaru этот объект имеет значение null для styleSheet[0]
).
Я также хотел бы сохранить зависимости до минимума.
Есть ли простой способ сделать это? Мне просто нужно создать соответствующие элементы и протестировать эффекты?
Изменить: Если нет, то какие проблемы кросс-браузера проверяют window.document.styleSheets
?
Ответы
Ответ 1
Вот что я получил, что работает. Он похож на ответы @Smamatti и @jfriend00, но больше близок. Я действительно хочу, чтобы был способ проверить правила напрямую, но хорошо.
CSS
.my-css-loaded-marker {
z-index: -98256; /*just a random number*/
}
JS:
$(function () { //Must run on jq ready or $('body') might not exist
var dummyElement = $('<p>')
.hide().css({height: 0, width: 0})
.addClass("my-css-loaded-marker")
.appendTo("body"); //Works without this on firefox for some reason
if (dummyElement.css("z-index") != -98256 && console && console.error) {
console.error("Could not find my-app.css styles. Application requires my-app.css to be loaded in order to function properly");
}
dummyElement.remove();
});
Ответ 2
Я не знаю, является ли это для вас вариантом, но если это один файл, который вы хотите проверить, вы можете написать свое сообщение об ошибке и переключить стиль, чтобы скрыть его в этом файле.
<span class="include_error">Error: CSS was not included!</span>
Файл CSS:
.include_error {
display: none;
visibility: hidden;
}
Ответ 3
Я тестирую правильную установку CSS с помощью javascript.
У меня есть правило CSS в моей таблице стилей, которая устанавливает определенный id в position: absolute.
#testObject {position: absolute;}
Затем я программно создаю временный div с видимостью: скрытый с этим идентификатором и получающий вычисленную позицию стиля. Если это не absolute
, то нужный CSS не установлен.
Если вы не можете поместить свое правило в таблицу стилей, вы можете определить одно или несколько правил, которые, по вашему мнению, являются репрезентативными для таблицы стилей и вряд ли изменятся, и спроектируйте временный объект, который должен получить эти правила и проверить для их существования таким образом.
Или, наконец, вы можете попытаться перечислить все внешние таблицы стилей и найти конкретное имя файла, которое включено.
Дело здесь в том, что если вы хотите увидеть, включена ли внешняя таблица стилей, вам нужно выбрать что-то об этой таблице стилей, которую вы можете искать (имя файла или какое-то правило в нем или какой-либо эффект, который он вызывает).
Ответ 4
Я бы использовал селектор css, подобный этому из виджета jquery.
$('link[href$="my-app.css"]')
Если вы вернете результат, это означает, что есть элемент ссылки, у которого есть href, заканчивающийся на "my-app.css"
Затем используйте эту функцию для проверки конкретного свойства css на элементе, в котором вы находитесь. Я бы предложил что-то конкретное для вас стилей, таких как ширина контейнера, а не нечто вроде -9999 zindex
var getStyle = function(el, styleProp) {
var x = !!el.nodeType ? el : document.getElementById(el);
if (x.currentStyle)
var y = x.currentStyle[styleProp];
else if (window.getComputedStyle)
var y = document.defaultView.getComputedStyle(x, null).getPropertyValue(styleProp);
return y;
}
Подобно этому
getStyle($('#stats-container')[0], "width")
или
getStyle("stats-container", "width")
Ответ 5
Если вы обеспокоены тем, что не можете редактировать таблицы стилей других людей, вы можете проксировать их через собственную таблицу стилей, используя import
@import url('http://his-stylesheet.css');
.hideErrorMessage{ ... }
Этого достаточно, если вы просто хотите узнать, пытается ли ваш код загружать таблицу стилей, но не поможет, если вам нужно знать, правильно ли загрузилась чужая таблица стилей.