是否有可能使用jQuery获取元素的百分比或像素的宽度,基于开发人员用CSS指定的?
我正在写一个jQuery插件,我需要做的是确定用户指定的元素的宽度。 问题是.width()或.css('width')总是会报告确切的像素,即使开发人员已经分配了它,例如width:90%的CSS。
有什么办法让jQuery在px或%中输出一个元素的宽度,这取决于开发人员用CSS给出了什么?
我会说最好的方法是自己计算一下:
var width = $('#someElt').width(); var parentWidth = $('#someElt').offsetParent().width(); var percent = 100*width/parentWidth;
这绝对是可能的!
你必须先隐藏()父元素。 这将阻止JavaScript计算子元素的像素。
$('.parent').hide(); var width = $('.child').width(); $('.parent').show(); alert(width);
看我的例子 。
我想你可以直接使用样式表('style')对象访问。 即使如此,YMMV通过浏览器。 例如elm.style.width
。
编辑彼得的评论::我不想'得到%'。 根据这个问题:
我需要能够做的是确定用户指定的元素的宽度… [有没有办法]输出元素的宽度在px或%,取决于开发人员用CSS给了它什么?
因此我提供了一个替代方法来检索“原始”CSS值。 这似乎在FF3.6上工作。 YMMV在其他地方(netadictos的答案可能更便携/通用,我不知道)。 再一次,它并不期望“得到%” 。
在这个stackoverflow问题中logging的方法。
你如何阅读JavaScript的CSS规则值?
唯一需要了解的是样式表是所有样式表中的类或循环。 下面的函数为您提供了该类的所有function,可以很容易地使用正则expression式来提取您所寻找的function。
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');
为了我的目的,我推断出MERRIGABELL的答案。
请记住,我只用整个百分比工作。
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'));
如果您正在寻找将原始元素百分比重新分配到新的百分比,那么在CSS中定义该值并以某种方式(class,id等)修改元素标识符以反映新的CSS定义是一个好习惯。 如果新百分比variables需要变化,这并不总是适用的。
.myClass{ width:50%; } .myNewClass{ width:35%; }
通过这个(或其他)方法添加一个删除:
$('.myClass').removeClass('myClass').addClass('myNewClass');
只是为了让它更加jqueryish
添加这个
$.fn.percWidth = function(){ return this.outerWidth() / this.parent().outerWidth() * 100; }
然后使用
$(selector).percWidth()
这将返回没有%符号的百分比值,所以你可以在计算中使用它
如果使用style标签设置,则可以简单地使用.prop()
例如$('。selector')。prop('style')。width.replace('%','')
我最近也遇到了这个问题,而且我真的不想做那些得到父母的宽度和计算百分比的“额外”工作。
经过几次尝试,我得到了:
$($($(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获取方式,但它很简单,适用于我。
我希望它有帮助。
干杯,