Мне нужно получить :after
и присвоить его переменной. Это возможно?
querySelectorAll
не работает.
alert(some_div_with_pseudo.querySelectorAll('::after')[0]) // undefined
Мне нужно получить :after
и присвоить его переменной. Это возможно?
querySelectorAll
не работает.
alert(some_div_with_pseudo.querySelectorAll('::after')[0]) // undefined
Короткий ответ: ты не можешь. Его еще нет.
У JavaScript есть доступ к DOM, который создается, когда страница загружается из HTML, и изменяется, когда JavaScript манипулирует им.
Псевдоэлемент генерируется CSS, а не HTML или JavaScript. Это просто для того, чтобы дать CSS что-то, за что можно держаться, но все это происходит без JavaScript.
Так и должно быть. В общей схеме страницы начинаются как HTML. JavaScript может использоваться для изменения его поведения и управления контентом с одной стороны, а CSS может использоваться для управления представлением результата:
HTML [→ JavaScript] → CSS → Result
Вы увидите, что CSS, в комплекте с псевдоэлементами, подходит к концу, поэтому JavaScript не заглядывает.
Смотрите также:
Предположим, что ваш CSS выглядит так:
.element:after {
content: 'NEW';
color: rgb(255, 0, 0);
}
Чтобы получить свойство цвета элемента. before, вы можете использовать следующий JavaScript:
var color = window.getComputedStyle(
document.querySelector('.element'), ':after'
).getPropertyValue('color')
var color = window.getComputedStyle(
document.querySelector('.element'), ':after'
).getPropertyValue('color');
alert(color);
.element:after {
content: 'NEW';
color: rgb(255, 0, 0);
}
<div class="element"></div>
Вы должны использовать что-то вроде этого:
window.getComputedStyle(
document.querySelector('somedivId'), ':after'
);
Пример здесь: https://jsfiddle.net/cfwmqbvn/
Я использую стрелку, указывающую направление, в котором контент и боковая панель будут переключаться в/из псевдоэлемента CSS. Приведенный ниже код фактически является режимом записи, однако также вполне возможно читать content
псевдоэлемента CSS.
Поскольку это немного связано, я также опубликую предварительные условия (источник: документация JavaScript веб-платформы JAB Creations, если что-то отсутствует, посмотрите там), так что те, кто хочет попробовать это, могут довольно быстро сделать это.
CSS
#menu a[href*='sidebar']::after {content: '\2192' !important;}
Использование JavaScript
css_rule_set('#menu a[href*="sidebar"]::after','content','"\u2192"','important');
Предварительные условия JavaScript
var sidebar = 20;
function id_(id)
{
return (document.getElementById(id)) ? document.getElementById(id) : false;
}
function css_rule_set(selector,property,value,important)
{
try
{
for (var i = 0; i<document.styleSheets.length; i++)
{
var ss = document.styleSheets[i];
var r = ss.cssRules ? ss.cssRules : ss.rules;
for (var j = 0; j<r.length; j++)
{
if (r[j].selectorText && r[j].selectorText==selector)
{
if (typeof important=='undefined') {r[j].style.setProperty(property,value);}
else {r[j].style.setProperty(property,value,'important');}
break;
}
}
}
}
catch(e) {if (e.name !== 'SecurityError') {console.log('Developer: '+e);}}
}
function sidebar_toggle()
{
if (id_('menu_mobile')) {id_('menu_mobile').checked = false;}
if (getComputedStyle(id_('side')).getPropertyValue('display') == 'none')
{
css_rule_set('#menu a[href*="sidebar"]::after','content','"\u2192"','important');
if (is_mobile())
{
css_rule_set('main','display','none','important');
css_rule_set('#side','width','100%','important');
css_rule_set('#side','display','block','important');
}
else
{
css_rule_set('main','width',(100 - sidebar)+'%');
css_rule_set('#side','display','block');
}
}
else
{
css_rule_set('#menu a[href*="sidebar"]::after','content','"\u2190"','important');
if (is_mobile())
{
css_rule_set('main','display','block','important');
css_rule_set('main','width','100%','important');
css_rule_set('#side','display','none','important');
}
else
{
css_rule_set('main','width','100%','important');
css_rule_set('#side','display','none');
}
}