根据开发人员使用 CSS 指定的内容,是不是可以使用 jQuery 以百分比或像素为单位获取元素的宽度?

Posted

技术标签:

【中文标题】根据开发人员使用 CSS 指定的内容,是不是可以使用 jQuery 以百分比或像素为单位获取元素的宽度?【英文标题】:Is it possible to use jQuery to get the width of an element in percent or pixels, based on what the developer specified with CSS?根据开发人员使用 CSS 指定的内容,是否可以使用 jQuery 以百分比或像素为单位获取元素的宽度? 【发布时间】:2011-04-29 17:26:47 【问题描述】:

我正在编写一个 jQuery 插件,我需要做的是确定用户指定的元素的宽度。问题是 .width() 或 .css('width') 将始终报告精确的像素,即使开发人员已经分配了它,例如宽度:90% 与 CSS。

有什么方法可以让 jQuery 以 px 或 % 为单位输出元素的宽度,具体取决于开发人员使用 CSS 给出的内容?

【问题讨论】:

这个问题似乎是在问两个正交的问题;请考虑修改。这两个问题是:1)“我怎样才能得到一个元素的宽度,以%为单位?” (来自标题)和 2)“如何获取样式表中指定的 CSS 值?” (从身体)。 【参考方案1】:

我想说最好的方法是自己计算:

var width = $('#someElt').width();
var parentWidth = $('#someElt').offsetParent().width();
var percent = 100*width/parentWidth;

【讨论】:

谢谢,这当然可以,但我想让脚本自动确定开发人员是否指定了百分比或像素,我认为这无法做到,所以我将其添加为他们可以传递给插件的选项。 @joren - 请修改您的问题标题。它与您的实际问题的含义相矛盾。 @joren:我看到你修改了你的问题标题。您还有其他问题吗? 不是真的,我最终还是决定在我的插件中添加设置 div 的百分比作为选项,这似乎是经过讨论后最好的做法。谢谢! @user1386213 没有。 .width() 总是返回一个绝对值(# 像素)。【参考方案2】:

我认为您可以直接使用样式表('style')对象访问。即便如此,YMMV 还是通过浏览器。例如elm.style.width.

编辑彼得的评论:: 我不希望“获得 %”。根据问题:

我需要做的是确定用户指定的元素的宽度... [有没有办法] 以 px 或 % 为单位输出元素的宽度,具体取决于开发人员提供的内容CSS?

因此,我提供了一种替代方法来检索“原始”CSS 值。这似乎适用于FF3.6。 YMMV 其他地方(netadictos 的答案可能更便携/通用,我不知道)。同样,它不希望“获得 %”

【讨论】:

如何返回百分比? 我明白了。我的标题是:Getting jQuery .width() to output percentage instead of px?。问题正文与标题相矛盾。目前还不清楚 OP 想要什么。 据此:***.com/a/10432934/1825772 仅适用于直接应用于元素的 css。【参考方案3】:

此 *** 问题中记录了执行此操作的方法。

How do you read CSS rule values with javascript?

您唯一需要知道的是哪个样式表是类或遍历所有样式表。以下函数为您提供了该类的所有特征,很容易做一个正则表达式来提取您要查找的特征。

function getStyle(className) 
    var classes = document.styleSheets[0].rules || document.styleSheets[0].cssRules
    for(var x=0;x<classes.length;x++) 

        if(classes[x].selectorText==className) 
                (classes[x].cssText) ? alert(classes[x].cssText) : alert(classes[x].style.cssText);
        
    

getStyle('.test');

【讨论】:

如果原始样式不是百分比或未定义,如何返回百分比? 问题是:“有没有办法让jQuery根据开发人员用CSS给出的元素以px或%为单位输出元素的宽度?”,也就是说用户是要求输出 css 中的内容。 我明白了。我的标题是:Getting jQuery .width() to output percentage instead of px?。问题正文与标题相矛盾。目前还不清楚 OP 想要什么。【参考方案4】:

出于我的目的,我推断出 MДΓΓ БДLL 的答案。

请记住,我只使用整数百分比。

    var getPercent = function(elem)
        var elemName = elem.attr("id");
        var width = elem.width();
        var parentWidth = elem.offsetParent().width();
        var percent = Math.round(100*width/parentWidth);
        console.log(elemName+"'s width = "+percent+"%");
    

    getPercent($('#folders'));
    getPercent($('#media'));
    getPercent($('#player'));

【讨论】:

【参考方案5】:

如果您希望将原始元素百分比重新分配给新百分比,最好在 CSS 中定义该值并以某种方式(类、id 等)修改元素标识符以反映新的 CSS 定义.如果新的百分比变量需要可变,这并不总是适用。

.myClass
    width:50%;


.myNewClass
    width:35%;

通过此(或其他)方法添加删除:

$('.myClass').removeClass('myClass').addClass('myNewClass');

【讨论】:

toggleClass() 怎么样?【参考方案6】:

这绝对是可能的!

你必须先 hide() 父元素。这将阻止 JavaScript 计算子元素的像素。

$('.parent').hide();
var width = $('.child').width();
$('.parent').show();
alert(width);

见我的example。

【讨论】:

这真的很奇怪。该元素可能会闪烁,它并不真正依赖这些函数的实际用途。如果这种行为发生变化怎么办? @German - 要防止元素闪烁,请参阅***.com/questions/744319#19873734上的单行示例【参考方案7】:

只是为了让它更jqueryish

添加这个

$.fn.percWidth = function()
  return this.outerWidth() / this.parent().outerWidth() * 100;

然后使用

$(selector).percWidth()

这将返回不带 % 符号的百分比值,因此您可以在计算中使用它

【讨论】:

【参考方案8】:

我最近也遇到了这个问题,我真的不想做“额外”的工作,即获取父级的宽度并计算百分比。

经过几次快速尝试,这就是我得到的结果:

    $($($(table).find('tr')[0]).find('td')).each(function (i, e) 
        var proptW = $(e).prop("style").width;
        console.log(proptW);
    );

所以,我认为这是使用 jQuery 根据开发人员在 css 中指定的内容获取元素宽度值的最接近的方法。

如您所见,我有一个表格,我需要检索每列的宽度。

我们无法直接用jQuery方法获取开发者指定值(DSV),但结合JavaScript内置方法后,距离获取DSV仅一步之遥。

由于DSV在Style中,而Style是元素的一个属性,所以我们可以使用jQuery方法:prop()来获取。该方法返回样式对象(比如 sty),这样我们就可以直接调用 sty.width 来获取 DSV。

这不是获取它的纯 jQuery 方式,但它足够简单并且适合我。

【讨论】:

【参考方案9】:

如果它使用样式标签设置,你可以简单地使用 .prop() 例如$('.selector').prop('style').width.replace('%', '')

【讨论】:

以上是关于根据开发人员使用 CSS 指定的内容,是不是可以使用 jQuery 以百分比或像素为单位获取元素的宽度?的主要内容,如果未能解决你的问题,请参考以下文章

前端开发人员问题二

Web开发人员常用的6大css框架

Firefox Web 开发人员工具栏是不是具有相当于 Firebug 的“检查元素”CSS 实时调试功能?

Front End Developer Questions 前端开发人员问题

如何确定网站用于特定 UI 效果的内容?

编写HTML和CSS前端开发不一定熟悉JavaScript