Изменить стиль css для псевдоэлемента: после содержимого с помощью JQuery

У меня есть форма шара, разработанная с помощью CSS3.
Пример скрипта JS Он имеет треугольник с

:after {
    content: "";
}

Мне нужно перемещать треугольник влево-вправо с помощью параметра слева css param с JQuery. Я знаю, что я не могу выбрать псевдоэлемент, который из DOM, но есть ли другой способ изменения: после стиля с js?

Да, мы можем поставить еще один div внутри, как

<div class="pop"><div class="arr"></div></div>

но это уродливое

Ответ 1

Существует гораздо более простой способ: просто установите значение свойства content псевдоэлемента content в значение attr(some-attribute-name), оно будет использовать значение атрибута HTML для родителя в качестве содержимого псевдоэлемента. Затем вы можете использовать метод setAttribute() для родительского элемента для динамического изменения значения. Ниже приведены макетные фрагменты того, как этот метод будет выглядеть в действии. Я также сделал сообщение в блоге с более подробной информацией, в котором содержится живая примерная скрипта.

CSS

#SomeElement:after {
    content: attr(some-attribute-name);
}

HTML

<div id="SomeElement" some-attribute-name="Pseudo content here!"></div>

JavaScript (для изменения псевдоконтента)

var someElement = document.getElementById('SomeElement');
someElement.setAttribute('some-attribute-name', 'New pseudo content here!');

Ответ 2

Вы вставляете стили CSS динамически в голову, а затем изменяете это:

$("<style type='text/css' id='dynamic' />").appendTo("head");

$('.pop').click(function(e){
  $("#dynamic").text(".pop:after{left:" + e.offsetX+ "px;}");
});

Вот демо

http://jsfiddle.net/HWnLd/

Ответ 3

В соответствии с этим связанным вопросом вы не можете выбрать псевдоэлемент. Поэтому я бы предложил определить дополнительные классы CSS и добавить классы в воздушный шар с помощью jQuery. Например. используйте класс следующим образом:

.pop.right:after {
    left: 80%;   
}

и примените его следующим образом:

$('div.pop').addClass('right');

Работа jsFiddle: http://jsfiddle.net/nrabinowitz/EUHAv/2/