在jQuery中获取CSS规则的百分比值

mon*_*ist 97 css jquery

假设规则如下:

.largeField {
    width: 65%;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法以某种方式获得'65%',而不是像素值?

谢谢.

编辑:不幸的是,在我的情况下使用DOM方法是不可靠的,因为我有一个导入其他样式表的样式表,因此cssRules参数以null未定义的值结束.

但是,这种方法适用于大多数简单的情况(一个样式表,文档标记内的多个单独的样式表声明).

red*_*exp 114

最简单的方法

$('.largeField')[0].style.width

// >>> "65%"
Run Code Online (Sandbox Code Playgroud)

  • 请注意:这只适用于直接应用于元素的css(例如`style ="width:65%"`). (46认同)
  • 蒂亚戈,你可以使用parseFloat(). (4认同)
  • 大!!只返回数字:parseInt($('.largeField')[0] .style.width,10); (3认同)

tim*_*com 82

这绝对是可能的!

您必须先隐藏()父元素.这将阻止JavaScript计算子元素的像素.

$('.parent').hide();
var width = $('.child').width();
$('.parent').show();
alert(width);
Run Code Online (Sandbox Code Playgroud)

看看我的例子.

现在......我想知道我是不是第一个发现这个黑客:)

更新:

一衬垫

element.clone().appendTo('body').wrap('<div style="display: none"></div>').css('width');
Run Code Online (Sandbox Code Playgroud)

它会在</body>标记之前留下一个隐藏元素,您可能想要这样做.remove().

查看单线的示例.

我愿意接受更好的想法!

  • 更新:function getCssWidth(childSelector){return jQuery(childSelector).parent().clone().hide().find(childSelector).width(); } console.log('child width:'+ getCssWidth('.child'));; (3认同)
  • 这应该是公认的解决方案。我还可以确认它对我有用,而其他答案没有获得最初指定的百分比值。 (2认同)

Ada*_*sek 49

我担心没有内置的方式.你可以这样做:

var width = ( 100 * parseFloat($('.largeField').css('width')) / parseFloat($('.largeField').parent().css('width')) ) + '%';
Run Code Online (Sandbox Code Playgroud)

  • 为了清楚起见,这并没有告诉你你的风格的价值,它给你一个计算值 (18认同)
  • @shevski它工作正常,你必须在span中添加`class ="largeField"`,目前你正在选择一个空集. (2认同)
  • @shevski我的例子给出了页面上现有元素的计算值,正如安东尼一年前已经指出的那样.你的评论是多余的. (2认同)

Gum*_*mbo 44

您可以访问该document.styleSheets对象:

<style type="text/css">
    .largeField {
        width: 65%;
    }
</style>
<script type="text/javascript">
    var rules = document.styleSheets[0].rules || document.styleSheets[0].cssRules;
    for (var i=0; i < rules.length; i++) {
        var rule = rules[i];
        if (rule.selectorText.toLowerCase() == ".largefield") {
            alert(rule.style.getPropertyValue("width"));
        }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

  • +1正确使用DOM方法(有时jQuery不是答案) (8认同)

小智 18

迟到,但对于较新的用户,如果css样式包含百分比,请尝试此操作:

$element.prop('style')['width'];
Run Code Online (Sandbox Code Playgroud)


Leo*_*uli 10

一个基于Adams的jQuery插件回答:

(function ($) {

    $.fn.getWidthInPercent = function () {
        var width = parseFloat($(this).css('width'))/parseFloat($(this).parent().css('width'));
        return Math.round(100*width)+'%';
    };

})(jQuery);

$('body').html($('.largeField').getWidthInPercent());?????
Run Code Online (Sandbox Code Playgroud)

将返回'65%'.如果您喜欢if(width =='65%'),则只返回四舍五入的数字以更好地工作.如果您直接使用Adams回答,那就没有用(我得到的东西就像64.93288590604027).:)


Gre*_*hak 6

基于 timofey 出色且令人惊讶的解决方案,这里是一个纯 Javascript 实现:

function cssDimensions(element) {
  var cn = element.cloneNode();
  var div = document.createElement('div');
  div.appendChild(cn);
  div.style.display = 'none';
  document.body.appendChild(div);
  var cs = window.getComputedStyle
    ? getComputedStyle(cn, null)
    : cn.currentStyle;
  var ret = { width: cs.width, height: cs.height };
  document.body.removeChild(div);
  return ret;
}
Run Code Online (Sandbox Code Playgroud)

希望它对某人有帮助。