1. 程式人生 > >jquery或者js獲取到元素寬高精確到小數

jquery或者js獲取到元素寬高精確到小數

OS 模式 idt alert 新版 老版本 保留 兼容ie rom

首先我們應該知道用jQuery的width()方法獲取元素的寬高及樣式屬性數值時,如果元素的屬性是浮點數,會自動四舍五入成整數。

而如果我們就是想獲取實際的帶小數的屬性數值時該用什麽方法。

在使用獲取到的寬度時,為了保證與原來元素的寬度一致,我在工作中處理時有兩種解決方案:

第一種js原生方法getBoundingClientRect()

$(obj)[0].getBoundingClientRect().width.toFixed(2); //獲取寬度 保留兩位小數

這種方法的width和height兼容性比較差:ie9以上支持width/height屬性。

附上兼容ie6~ie8的width/height的寫法:

var rectWidth = rectObject.right - rectObject.left;
    rectHeight = rectObject.bottom - rectObject.top;

第一種方如果取left和top,它並不是在position下得left和top值,它是指元素上邊或左邊到視窗上邊或左邊的距離;

兼容性用ie11的Document Mode模式測試,ie5以上都能支持。在ie7及ie7以下left和top會多出兩個像素。

第二種js原生最終樣式方法,即 currentStyle getComputedStyle 的兼容寫法

var oAbc = $(‘.element‘)[0];
if(oAbc.currentStyle) {
//IE、Opera
alert(oAbc.currentStyle.width);
var elementX = parseFloat($(‘.element‘)[0].currentStyle.left).toFixed(2);
var elementY = parseFloat($(‘.element‘)[0].currentStyle.top).toFixed(2);

} else {
//FF、chrome、safari
var elementX = parseFloat(getComputedStyle($(‘.element‘)[0],false).left).toFixed(2);
var elementY = parseFloat(getComputedStyle($(‘.element‘)[0],false).top).toFixed(2);
}

getComputedStyle(obj,false):在FF新版本號中僅僅須要第一個參數,即操作對象,第二個參數寫“false”也是大家通用的寫法,目的是為了兼容老版本號的火狐瀏覽器。

建議用第二種,兼容性好,且能同時取到width、height、left、top準確的數值。

jquery或者js獲取到元素寬高精確到小數