ndimentiev
5/1/2019 - 6:42 PM

HTMLElement.pseudoStyle: Setting/Modifying :before and :after in javascript

var UID = {
	_current: 0,
	getNew: function(){
		this._current++;
		return this._current;
	}
};

HTMLElement.prototype.pseudoStyle = function(element,prop,value){
	var _this = this;
	var _sheetId = "pseudoStyles";
	var _head = document.head || document.getElementsByTagName('head')[0];
	var _sheet = document.getElementById(_sheetId) || document.createElement('style');
	_sheet.id = _sheetId;
	var className = "pseudoStyle" + UID.getNew();
	
	_this.className +=  " "+className; 
	
	_sheet.innerHTML += " ."+className+":"+element+"{"+prop+":"+value+"}";
	_head.appendChild(_sheet);
	return this;
};

//Example 1: Modify
//Say we have these styles:
.test:before		{
	content: "testing";
	color: red;
}

//And this HTML:
<div id="testDiv" class="test">test2</div>

//In this example, we have an element which already has a :before with styles set. Here is how we would modify them:
var div = document.getElementById("testDiv");
div.pseudoStyle("before","color","purple");


//Example 2: Set
//Say we have an element with NO :before styles currently set:

<div id="testDiv">test2</div>

//Here’s how we would set some :before styles:

var div = document.getElementById("testDiv");
div.pseudoStyle("before","content","'test'");
div.pseudoStyle("before","color","purple");

//OR we can chain methods:

var div = document.getElementById("testDiv");
div.pseudoStyle("before","content","'test'").pseudoStyle("before","color","purple");