Select 具有特定 css 规则但没有 jQuery 的所有节点
Select all node that has certain css-rule without jQuery
如何获取所有具有特定CSS规则的节点,例如如果定义:
html {
color: blue;
}
div.x {
color: blue;
}
我想获取所有具有 color: blue
的节点,我想获取 html
(document.children[0]
) 以及所有 div
和 class='x'
仅节点,而不是所有受该规则影响的子节点。
编辑 最终目标是从网站中删除某些 css 规则,我试过这个脚本但在 Chrome 上不起作用:
var xRules = ['userSelect','webkitTouchCallout','webkitUserSelect','khtmlUserSelect','mozUserSelect','msUserSelect'];
var dS = document.styleSheets;
for(var z in dS) {
var dsz = dS[z].cssRules;
if(!dsz) continue;
for(var y in dsz) {
var dszy = dsz[y].style;
if(!dszy) continue;
console.log(dszy.webkitUserSelect);
for(var x in xRules) {
var xx = xRules[x];
dszy.removeProperty(xx);
}
}
}
所以我能想到的就是我必须找到元素然后删除样式。
目前 css 无法做到这一点。但是你可以做的是使用 jquery (javascript) 列出所有元素并检查颜色是否为蓝色。
$( "*" ).each(function() {
if ($(this).css("color") === "blue") {
// do some stuff with $(this)
}
});
我不确定它是否会起作用,因为我不知道如何 jquery returns css 颜色 属性。
我刚刚注意到您想要没有 jQuery 的解决方案,所以这里是:
var all = document.getElementsByTagName("*");
for (var i=0, max = all.length; i < max; i++) {
if (window.getComputedStyle(all[i], null).getPropertyValue("color") === "blue")
// Do something with the element here
}
纯粹Javascript
Array.from(document.getElementsByTagName('*')).filter(function(el) {
return window.getComputedStyle(el).color === 'rgb(0, 0, 0)';
})
Array.from 目前只能在 Firefox 中使用,但可以很容易地用 [].slice.call(...)
之类的东西替换
您可以使用 document.styleSheets
读取加载的 css 规则。然后,找到设置特定 属性 的规则,在您的情况下 style.color == "blue"
.
然后,从规则中得到 selectorText
,它会给你 selectors。然后使用 document.querySelector()
将获得的 select 或作为参数传递给 select 元素将很容易。
var classes = document.styleSheets[0].rules || document.styleSheets[0].cssRules;
for (var x = 0; x < classes.length; x++) {
var cls = classes[x];
if(cls.style.color == "blue") {
alert(cls.selectorText);
//Gets a node list of the elements matching the selector
var elements = document.querySelectorAll(cls.selectorText);
}
}
html {
color: blue;
}
div.x {
color: blue;
}
如何获取所有具有特定CSS规则的节点,例如如果定义:
html {
color: blue;
}
div.x {
color: blue;
}
我想获取所有具有 color: blue
的节点,我想获取 html
(document.children[0]
) 以及所有 div
和 class='x'
仅节点,而不是所有受该规则影响的子节点。
编辑 最终目标是从网站中删除某些 css 规则,我试过这个脚本但在 Chrome 上不起作用:
var xRules = ['userSelect','webkitTouchCallout','webkitUserSelect','khtmlUserSelect','mozUserSelect','msUserSelect'];
var dS = document.styleSheets;
for(var z in dS) {
var dsz = dS[z].cssRules;
if(!dsz) continue;
for(var y in dsz) {
var dszy = dsz[y].style;
if(!dszy) continue;
console.log(dszy.webkitUserSelect);
for(var x in xRules) {
var xx = xRules[x];
dszy.removeProperty(xx);
}
}
}
所以我能想到的就是我必须找到元素然后删除样式。
目前 css 无法做到这一点。但是你可以做的是使用 jquery (javascript) 列出所有元素并检查颜色是否为蓝色。
$( "*" ).each(function() {
if ($(this).css("color") === "blue") {
// do some stuff with $(this)
}
});
我不确定它是否会起作用,因为我不知道如何 jquery returns css 颜色 属性。
我刚刚注意到您想要没有 jQuery 的解决方案,所以这里是:
var all = document.getElementsByTagName("*");
for (var i=0, max = all.length; i < max; i++) {
if (window.getComputedStyle(all[i], null).getPropertyValue("color") === "blue")
// Do something with the element here
}
纯粹Javascript
Array.from(document.getElementsByTagName('*')).filter(function(el) {
return window.getComputedStyle(el).color === 'rgb(0, 0, 0)';
})
Array.from 目前只能在 Firefox 中使用,但可以很容易地用 [].slice.call(...)
您可以使用 document.styleSheets
读取加载的 css 规则。然后,找到设置特定 属性 的规则,在您的情况下 style.color == "blue"
.
然后,从规则中得到 selectorText
,它会给你 selectors。然后使用 document.querySelector()
将获得的 select 或作为参数传递给 select 元素将很容易。
var classes = document.styleSheets[0].rules || document.styleSheets[0].cssRules;
for (var x = 0; x < classes.length; x++) {
var cls = classes[x];
if(cls.style.color == "blue") {
alert(cls.selectorText);
//Gets a node list of the elements matching the selector
var elements = document.querySelectorAll(cls.selectorText);
}
}
html {
color: blue;
}
div.x {
color: blue;
}