Javascript 是否可以手动计算(计算)生成的css样式?
是否可以手动计算元素的css样式(无需渲染) 假设我应该有一个HTML结构:Javascript 是否可以手动计算(计算)生成的css样式?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,是否可以手动计算元素的css样式(无需渲染) 假设我应该有一个HTML结构: <p style="some_style1"> <span style="some_style2"> <span style="some_style3"> TEXT </span> </span> </p> 正文 我知道JS对象中的一些样式1、一些样式2、一些样式3是什么(例如,我有每个元素的数据,如:
<p style="some_style1">
<span style="some_style2">
<span style="some_style3">
TEXT
</span>
</span>
</p>
正文
我知道JS对象中的一些样式1、一些样式2、一些样式3是什么(例如,我有每个元素的数据,如:{font:'Times New Roman'12px bold;text align:center;}
)
我想手动(无需在浏览器中渲染整个结构)计算将影响“文本”的结果样式
我应该使用什么算法(或解决方案?我能想到的最简单的方法是将整个内容包装在一个容器中,并将其设置为“显示:无”,然后将其附加到DOM中。浏览器不会渲染它,但您可以查询计算样式 下面的示例显示了当结构未连接到DOM时,jQuery如何找不到样式信息,但当连接到DOM时,它可以:
jQuery(function($) {
// Disconnected structure
var x = $("<p style='color: red'><span style='padding: 2em'><span style='background-color: white'>TEXT</span></span></p>");
// Get the span
var y = x.find("span span");
// Show its computed color; will be blank
display("y.css('color'): " + y.css('color'));
// Create a hidden div and append the structure
var d = $("<div>");
d.hide();
d.append(x);
d.appendTo(document.body);
// Show the computed color now; show red
display("y.css('color'): " + y.css('color'));
// Detach it again
d.detach();
function display(msg) {
$("<p>").html(String(msg)).appendTo(document.body);
}
});
jQuery(函数($){
//断开结构
var x=$(“TEXT
”;
//获得跨度
变量y=x.find(“跨度”);
//显示其计算颜色;将为空
显示(“y.css('color'):“+y.css('color'));
//创建一个隐藏的div并附加结构
变量d=$(“”);
d、 隐藏();
d、 附加(x);
d、 附录(文件正文);
//现在显示计算的颜色;显示红色
显示(“y.css('color'):“+y.css('color'));
//再把它拆开
d、 分离();
功能显示(msg){
$(“”).html(字符串(msg)).appendTo(document.body);
}
});
|
我不能保证所有的值都是正确的,你必须试试看;浏览器可能会推迟计算某些内容,直到/除非容器可见。如果您发现您想要的某些属性尚未计算,则可能必须使
div
可见,但不在页面上(位置:绝对;左:-10000px
) 我能想到的最简单的方法是将整个内容包装在一个容器中,然后将其附加到DOM中。浏览器不会渲染它,但您可以查询计算样式
下面的示例显示了当结构未连接到DOM时,jQuery如何找不到样式信息,但当连接到DOM时,它可以:
jQuery(function($) {
// Disconnected structure
var x = $("<p style='color: red'><span style='padding: 2em'><span style='background-color: white'>TEXT</span></span></p>");
// Get the span
var y = x.find("span span");
// Show its computed color; will be blank
display("y.css('color'): " + y.css('color'));
// Create a hidden div and append the structure
var d = $("<div>");
d.hide();
d.append(x);
d.appendTo(document.body);
// Show the computed color now; show red
display("y.css('color'): " + y.css('color'));
// Detach it again
d.detach();
function display(msg) {
$("<p>").html(String(msg)).appendTo(document.body);
}
});
jQuery(函数($){
//断开结构
var x=$(“TEXT
”;
//获得跨度
变量y=x.find(“跨度”);
//显示其计算颜色;将为空
显示(“y.css('color'):“+y.css('color'));
//创建一个隐藏的div并附加结构
变量d=$(“”);
d、 隐藏();
d、 附加(x);
d、 附录(文件正文);
//现在显示计算的颜色;显示红色
显示(“y.css('color'):“+y.css('color'));
//再把它拆开
d、 分离();
功能显示(msg){
$(“”).html(字符串(msg)).appendTo(document.body);
}
});
|
我不能保证所有的值都是正确的,你必须试试看;浏览器可能会推迟计算某些内容,直到/除非容器可见。如果您发现您想要的某些属性尚未计算,则可能必须使
div
可见,但不在页面上(位置:绝对;左:-10000px
) 我找到了一些关于这方面的文章:关于Stackoverflow
还有一个关于quirksmode:的,显示以下功能:
function getStyle(el,styleProp)
{
var x = document.getElementById(el);
if (x.currentStyle)
var y = x.currentStyle[styleProp];
else if (window.getComputedStyle)
var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
return y;
}
这允许您查询样式属性我在Stackoverflow上找到了一些关于这方面的文章 还有一个关于quirksmode:的,显示以下功能:
function getStyle(el,styleProp)
{
var x = document.getElementById(el);
if (x.currentStyle)
var y = x.currentStyle[styleProp];
else if (window.getComputedStyle)
var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
return y;
}
这允许您查询样式属性样式按照其定义的顺序相互覆盖:因此,
some_style3
中的任何内容都可以覆盖some_style2
中的相同选择器。否则,它将只是选择器集的并集
EDIT有些选择器不会覆盖,而是根据以前的定义相对地进行操作,因此您必须小心。样式按照定义的顺序相互覆盖:因此,在
Some\u style3
中覆盖Some\u style2
中相同选择器的任何内容都可以。否则,它将只是选择器集的并集
编辑某些选择器不会覆盖,而是相对地根据以前的定义进行操作,因此您必须小心。存在不需要在窗口中渲染的浏览器(无头浏览器)。您可以加载页面并查询所需内容。不过,要想获得您所要求的内容,并不比在普通浏览器中更容易 是一个用跨浏览器JavaScript编写的CSS解析器,它可能是从零开始或完全实现所需的第一步。给它一个样式表,它会告诉你浏览器会解析什么。您仍然必须管理:
- 大教堂
- 风格的传承,
- 确定哪些规则适用于具有或不具有类、id、属性、同级等的给定元素
- 遴选者的优先次序
- 等
它的作者是D.Glazman,W3C CSS小组的联合主席,Kompozer、NVu和BlueGriffon的开发者,因此它应该像预期的那样解析CSS:)存在不需要在窗口中渲染的浏览器(无头浏览器)。您可以加载页面并查询所需内容。不过,要想获得您所要求的内容,并不比在普通浏览器中更容易 是一个用跨浏览器JavaScript编写的CSS解析器,它可能是从零开始或完全实现所需的第一步。给它一个样式表,它会告诉你浏览器会解析什么。您仍然必须管理:
- 大教堂
- 风格的传承,
- 确定哪些规则适用于具有或不具有类、id、属性、同级等的给定元素 <