Читайте: парящий псевдо-класс с JavaScript
Я сделал функцию, которая перезаписывает:hover некоторых элементов на странице. Он исчезает между нормалью и эффектом:hover. Для этого мне нужно было создать класс.hover в моем файле CSS. Я думаю, что это немного нечисто. Как я могу прочитать содержимое псевдо-класса:hover?
4 ответа
ОБНОВЛЕНИЕ: я как-то понял это неправильно. Приведенный ниже пример не работает. Смотрите комментарий @bfavaretto для объяснения.
В Firefox, Opera и Chrome или любом другом браузере, который правильно реализует window.getComputedStyle
очень просто Вы просто должны передать "hover" в качестве второго аргумента:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style type="text/css">
div {
display: block;
width: 200px;
height: 200px;
background: red;
}
div:hover {
background: green;
}
</style>
</head>
<body>
<div></div>
<script type="text/javascript">
window.onload = function () {
var div = document.getElementsByTagName("div")[0];
var style = window.getComputedStyle(div, "hover");
alert(style.backgroundColor);
};
</script>
</body>
</html>
Но я не верю, что есть еще решение для Internet Explorer, кроме использования Итак, имея document.styleSheets
как предложил Гамбо. Но будут различия. .hover
класс пока лучшее решение. Не совсем нечисто.
С помощью getComputedStyle
так как на принятый ответ не сработает, потому что:
- Вычисленный стиль для состояния наведения доступен только тогда, когда элемент фактически находится в этом состоянии.
- Второй параметр для
getComputedStyle
должен быть пустым или псевдоэлементом. Не работает с:hover
потому что это псевдокласс.
Вот альтернативное решение:
function getCssPropertyForRule(rule, prop) {
var sheets = document.styleSheets;
var slen = sheets.length;
for(var i=0; i<slen; i++) {
var rules = document.styleSheets[i].cssRules;
var rlen = rules.length;
for(var j=0; j<rlen; j++) {
if(rules[j].selectorText == rule) {
return rules[j].style[prop];
}
}
}
}
// Get the "color" value defined on a "div:hover" rule,
// and output it to the console
console.log(getCssPropertyForRule('div:hover', 'color'));
Вы могли бы получить доступ document.styleSheets
и искать правило, которое применяется к этому конкретному элементу. Но это не чище, чем использование простого дополнительного класса.
Если здесь есть люди, которые используют ответы на принятые вопросы, но это не сработает, вот хорошая функция, которая может:
function getPseudoStyle(id, style) {
var all = document.getElementsByTagName("*");
for (var i=0, max=all.length; i < max; i++) {
var targetrule = "";
if (all[i].id === id) {
if(all[i].selectorText.toLowerCase()== id + ":" + style) { //example. find "a:hover" rule
targetrule=myrules[i]
}
}
return targetrule;
}
}
Есть альтернативный способ получить :hover
псевдокласс с javascript. Вы можете написать свои стилиhover
псевдокласс в content
свойство.
p::before,
p::after{
content: 'background-color: blue; color:blue; font-size: 14px;';
}
затем прочтите его с помощью метода getComputedStyle():
console.log(getComputedStyle(document.querySelector('p'),':before').getPropertyValue('content'));