在jQuery中获取全局样式表的值

时间:2011-08-20 11:27:28

标签: javascript jquery html css

当我在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

4 个答案:

答案 0 :(得分:2)

var width = ( 100 * parseFloat($("#sideBar").css('width')) / parseFloat($("#sideBar").parent().css('width')) ) + '%';

参考get CSS rule's percentage value in jQuery

这里是小提琴http://jsfiddle.net/jSGTs/

答案 1 :(得分:2)

这就是我所做的。由于所有方法都没有真正可靠(跨浏览器等),我遇到了CSS parser/abstracter? How to convert stylesheet into object

首先我要使用一些完全成熟的CSS解析器,例如

  1. JSCSSP
  2. jQuery CSS parser
  3. 这是强大的,但也是重量级的。最终我最终得到了自己的小功能

    // 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
}

这里使用的技巧是隐藏其父级,获取计算的样式,然后取消隐藏父级。