Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Управление псевдоклассами и псевдоэлементами (https://javascript.ru/forum/dom-window/52630-upravlenie-psevdoklassami-i-psevdoehlementami.html)

2chan 28.12.2014 01:45

Управление псевдоклассами и псевдоэлементами
 
Есть ли возможность управлять псевдоэлементами и псевдоклассами через js, не добавляя/изменяя/удаляя style-теги? Именно управлять, ибо как получить их стили я и так знаю.
Сначала мне стало интересно, что будет если по mouseup-событию, т.е. когда после выделения юзер отпускает кнопку мыши, включать следующую функцию:
document.onmouseup = function() {
	var b = document.querySelector('::selection'); /* получаем выделенный фрагмент */ 
	/* 
	 * т.к. ::selection - псевдоЭЛЕМЕНТ , я подумал что в полученном объекте будет innerHTML или textContent
	*/
	b = b.innerHTML || b.textContent || b; /*но всё-таки есть это просто только выделенный текст - в конце будет b */
	alert(b); /* по задумке выведет выделенную часть */
};

, но document.querySelector вернул "SyntaxError: An invalid or illegal string was specified"

Что ещё запрещает querySelector? Я знаю что нельзя получить элементы с псевдоклассом :visited, может ещё что есть?
И как управлять псевдоэлементами ::before ::after. Запрос на получение элемента (ещё раз повторюсь, именно его самого, а не его стиля) '.class::before' как и '.class:before' - ничего не дал.
И, если есть способ, как изменить content этого самого :before или :after?

Да,
document.getElementById('class').querySelector(':first-letter');
- тоже возвращает null.

ruslan_mart 28.12.2014 13:50

2chan, так работать не будет.

window.getSelection() -> для получения выделенного текста

element.textContent.charAt(0) -> для получения первой буквы текста


Ну зачем изменять ::after/::before через JS? Просто меняешь класс и всё. Но если прям так надо, то:

var style = document.createElement('style');
style.type = 'text/css';
style.appendChild(document.createTextNode('\
    .myElem::before {\
        content: "123";\
    }\
    .myElem::after {\
        content: url("test.png");\
    }\
'));
document.head.appendChild(myElem);


Но лучше всё-таки использовать классы, ибо вариант с созданием style - говнокодинг.


Часовой пояс GMT +3, время: 20:32.