document.styleSheets
伪元素是不能选中的,如果非要改他的样式,两个方法。
静态方法:
addClass的时候,新add的class带有新的伪元素。
动态方法:
如果知道它在document.styleSheets对象中的位置,直接抓出来.style=改写
但是我们怎么可能知道它的位置呢,除非用for循环查找。
于是就有牛人写了一个伪查找:
<!DOCTYPE html>
<title>CSS</title> <style>
body {
font: %/1.45 charter;
}
ref::before {
content: '\00A7';
letter-spacing: .1em;
}
</style> <article>The seller can, under Business Law <ref></ref>, offer a full refund to buyers. </article> <script>
function ruleSelector(selector) {
function uni(selector) {
return selector.replace(/::/g, ':')
}
return Array.prototype.filter.call(Array.prototype.concat.apply([], Array.prototype.map.call(document.styleSheets, function(x) {
return Array.prototype.slice.call(x.cssRules);
})), function(x) {
return uni(x.selectorText) === uni(selector);
});
} var toggle = false,
pseudo = ruleSelector("ref::before").slice(-); document.querySelector("article").onclick = function() {
pseudo.forEach(function(rule) {
console.log(rule)
if (toggle = !toggle)
rule.style.color = "red";
else
rule.style.color = "black";
});
}
</script>
之所以说他牛,是因为他用了好多call啊apply啊return啊concat啊map啊,把Array的原型都改了。
说他伪查找,是因为最后ruleSelector("ref::before").slice(-1)这为什么是倒数第一个,就只有他自己知道了。
比如我做的实验,就是倒数第二个,谁写最后面谁第一个。
真的查找,显然开销是很大的,如果后端需要改一些不能动html的页面样式,可以考虑直接console手动找出来,例如:
var pseudo = document.styleSheets[].cssRules[];
pseudo.style.left = start+"px";
上面是修改第25个css样式表文件中的第7条规则中的left值。整个cssRules对象如下:
{style: CSSStyleDeclaration, selectorText: ".historylist .sl-item::after", parentRule: null, parentStyleSheet: CSSStyleSheet, cssText: ".historylist .sl-item::after { content: ''; positi… opacity: 0; background-color: rgb(22, 22, 22); }"…}cssText: ".historylist .sl-item::after { content: ''; position: absolute; top: 8px; left: 54px; width: 100px; height: 45px; display: block; z-index: -1; border-radius: 45px; opacity: 0; background-color: rgb(22, 22, 22); }"parentRule: nullparentStyleSheet: CSSStyleSheetselectorText: ".historylist .sl-item::after"style: CSSStyleDeclarat...
其中.style可以获取一个对象,就是一般dom对象.style获取的一样。
document.styleSheets的更多相关文章
- document.styleSheets[0]是个啥
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 样式声明对象:document.styleSheets[0].rules[4].style;
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaScript学习笔记——DOM_对document对象的内容、属性、样式的操作
javascript-对文档对象的内容.属性.样式的操作 一.操作内容 1. innerHTML 用来设置或获取对象起始和结束标签内的内容(识别html标签) 2. innerText 用来设置或获取 ...
- javascript高级程序设计---document节点
document节点是文档的根节点,每张网页都有自己的document节点,window.document就是指向这个节点.只要浏览器开始载入文档,这个节点就开始了 对于HTML文档来说,docume ...
- js操作styleSheets
document.styleSheets这个接口可以获取网页上引入的link样式表和style样式表.比如 最后的输出结果如下. 换下代码看看我们具体的styleSheets具体输出什么 这些都是次要 ...
- jacascript document对象
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! Document 类型表示文档,或文档的根节点,这个节点是隐藏的,没有具体的节点标签:而 html 是根标 ...
- (87)Wangdao.com第二十天_JavaScript document 节点对象
document 节点对象, 代表整个文档,每张网页都有自己的 document 对象. window.document 当浏览器开始加载文档时就存在了 正常的网页使用 document 或者 win ...
- document的属性操作
document对象: 1.直接操作: 对象.属性 = 值; 如下面一段代码: <a href = "...">跳转</a> <script> ...
- Document节点
概述 document节点对象代表整个文档,每张网页都有自己的document对象.window.document属性就指向这个对象.只要浏览器开始载入 HTML 文档,该对象就存在了,可以直接使用. ...
随机推荐
- Servlet配置文件
<url-pattern>/servlet/demo</url-pattern> 1.以 / 开头, /代表工程路径:(必须要加 / ) 2.以 * 开头,必须加后缀名 /* ...
- Unity monodev环境搭建
断点调试功能可谓是程序员必备的功能了.Unity3D支持编写js和c#脚本,但很多人可能不知道,其实Unity3D也能对程序进行断点调试的.不过这个断点调试功能只限于使用Unity3D自带的MonoD ...
- 基于Lucene的文件检索Demo
通过Lucene实现了简单的文件检索功能的Demo.这个Demo支持基于文件内容的检索,支持中文分词和高亮显示. 下面简单的介绍下核心的类 1)索引相关的类 1.FileIndexBuilder -- ...
- mina编解码(摘录)
一.Mina对编解码的支持 我们知道网络通讯过程实际是对二进制数据进行处理的过程,二进制数据是计算机认识的数据.对于接收到的二进制数据我们需要将其转换成我们所熟悉的数据格式,此过程称为解码(decod ...
- InnoDB MyISAM区别及优化(摘录)
InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数 ...
- 【原】个人对win7开机黑屏只有鼠标排障总结
个人对win7开机黑屏只有鼠标排障总结 文:铁乐猫 第一种情况是explorer.exe进程丢失或损坏有关: 判断方法是按Ctrl+Alt+Del键能呼出任务管理器,结束explorer.exe进程, ...
- PHP 数组的值插入
曾今写过一个坑货的数组方法 function array_insert($myarray,$value,$position=0) { $fore=($position==0)?array():a ...
- MVC中HttpContext, HttpContextBase, HttpContextWrapper联系
HttpContext // // 摘要: // 封装有关个别 HTTP 请求的所有 HTTP 特定的信息. public sealed class HttpContext : IServicePro ...
- (转)教你如何使用php session
PHP session用法其实很简单它可以把用户提交的数据以全局变量形式保存在一个session中并且会生成一个唯一的session_id,这样就是为了多了不会产生混乱了,并且session中同一浏览 ...
- For each db / table
use master go exec master..sp_MSforeachdb 'use [?]; IF (SELECT db_id(''?'')) > 4 and (SELECT DATA ...