当我在HTML页面范围
上使用这样的样式表定义时#sideBar {
float: left;
width: 27.5%;
min-width: 275;
...
}
以下代码不返回CSS定义宽度的值:
document.getElementById("sideBar").style.width;
在这个article函数中,它显示了检索正确的值,当我尝试这样做时它不能真正跨浏览器工作。所以我在jQuery中尝试了类似的东西,但失败了。
$("#sideBar").css("width'"); // 1st trial
$("#sideBar").width(); // 2nd trial
我得到绝对像素宽度,不他的百分比值为27.5。 有没有办法检索百分比值?
注: SO问题类似(但不完全相同):get CSS rule's percentage value in jQuery。
答案 0 :(得分:2)
var width = ( 100 * parseFloat($("#sideBar").css('width')) / parseFloat($("#sideBar").parent().css('width')) ) + '%';
答案 1 :(得分:2)
这就是我所做的。由于所有方法都没有真正可靠(跨浏览器等),我遇到了CSS parser/abstracter? How to convert stylesheet into object。
首先我要使用一些完全成熟的CSS解析器,例如
这是强大的,但也是重量级的。最终我最终得到了自己的小功能
// Get the original CSS values instead of values of the element.
// @param {String} ruleSelector
// @param {String} cssprop
// @returns {String} property of the style
exports.getCssStyle = function (ruleSelector, cssprop) {
for (var c = 0, lenC = document.styleSheets.length; c < lenC; c++) {
var rules = document.styleSheets[c].cssRules;
for (var r = 0, lenR = rules.length; r < lenR; r++) {
var rule = rules[r];
if (rule.selectorText == ruleSelector && rule.style) {
return rule.style[cssprop]; // rule.cssText;
}
}
}
return null;
};
答案 2 :(得分:1)
当您需要全局样式表中定义的确切值时,您必须访问style-element中的规则 这不是在jQuery中实现的。
IE:rules-collection
其他:CSSRuleList(IE8或9也可能支持,不能准确告诉你)
答案 3 :(得分:1)
jQuery中没有任何内容,即使在javascript中也没有任何直接的内容。采用timofey的答案并运行它,我创建了这个函数,用于获取你想要的任何属性:
// gets the style property as rendered via any means (style sheets, inline, etc) but does *not* compute values
// domNode - the node to get properties for
// properties - Can be a single property to fetch or an array of properties to fetch
function getFinalStyle(domNode, properties) {
if(!(properties instanceof Array)) properties = [properties]
var parent = domNode.parentNode
if(parent) {
var originalDisplay = parent.style.display
parent.style.display = 'none'
}
var computedStyles = getComputedStyle(domNode)
var result = {}
properties.forEach(function(prop) {
result[prop] = computedStyles[prop]
})
if(parent) {
parent.style.display = originalDisplay
}
return result
}
这里使用的技巧是隐藏其父级,获取计算的样式,然后取消隐藏父级。