1. 程式人生 > >基於js中style.width與offsetWidth的區別

基於js中style.width與offsetWidth的區別

作為一個初學者,經常會遇到在獲取某一元素的寬度(高度、top值...)時,到底是用 style.width還是offsetWidth的疑惑。

1. 當樣式寫在行內的時候,如 <div id="box" style="width:100px">時,用 style.width或者offsetWidth都可以獲取元素的寬度。

但是,當樣式寫在樣式表中時,如 #box{ width: 100px; }, 此時只能用offsetWidth來獲取元素的寬度,而style.width所返回的值為空。

2. style.width 獲取的元素寬度只是div的寬度,不包括border、和padding所佔的寬度,且寬度值是帶單位px的。

offsetWidth 獲取的元素寬度為width+border+padding的值(不包括margin),且返回值只為一個數值,不帶單位。

例子1:

<head>
    <script>
      window.onload = function(){
        var box = document.getElementById('box');
        console.log(box.style.width); 
        console.log(box.offsetWidth); 
       }
</script>
  </head>
  <body>
    <div id="box" style="width:300px; height: 300px; padding:3px; margin: 1px; border: 1px solid red;"></div>
  </body>

控制檯輸出的第一個結果為:  300px

控制檯輸出的第二個結果為:  308      注:300+ 3x2 +1x2 = 308, 且不帶單位

3. style.width 也可以在js中用來設定元素的寬度,而offsetWidth不可以。

再舉個栗子:

<script>
      window.onload = function(){
        var box = document.getElementById('box');
        box.style.width = '200px';
        console.log(box.offsetWidth);
        console.log(box.style.width);
        box.offsetWidth = '400px';
        console.log(box.offsetWidth);
        console.log(box.style.width);
      }
    </script>
  </head>
  <body>
    <div id="box" style="width:300px; height: 300px; padding:3px; margin: 2px; border: 1px solid red;"></div>
  </body>

控制檯輸出的結果分別為 208     200px     208      200px

也就是說通過style.width 設定寬度成功,而 通過offsetWidth設定寬度失敗。


相關推薦

基於jsstyle.widthoffsetWidth區別

作為一個初學者,經常會遇到在獲取某一元素的寬度(高度、top值...)時,到底是用 style.width還是offsetWidth的疑惑。1. 當樣式寫在行內的時候,如 <div id="box" style="width:100px">時,用 style.wi

jsstyle,currentStyle和getComputedStyle的區別

偽類 pro null prop obj 解決 strong 語法 nts js中style,currentStyle和getComputedStyle的區別 MarysMa 在js中用xx.style.marginTop是無法獲取寫在css或<sytle>標簽

js 使用var省略var 定義變量的區別

不必要 pos pan 定義 就是 body 對象 gpo ole 在js中定義變量的時候,我們習慣了用var,其實省略var也可以用的。 今天總結一下,使用var或省略var 定義變量的區別 1、var 私有變量,只能在當前js使用,或者在當前作用域使用,定義私有變量,

jsstyle,currentStyle,getComputedStyle和getBoundingClientRect的區別以及獲取css操作方法

js中style,currentStyle,getComputedStyle和getBoundingClientRect的區別以及獲取css操作方法 在js中,之前我們獲取屬性大多用的都是ele.style.border這種形式的方法,但是這種方法是有侷限性的,該方法只能獲取到行內樣式,獲取不

JS for in for of的區別

最直接的區別就是: for in遍歷的是陣列的索引(即鍵名), 而for of遍歷的是陣列元素值。 Array.prototype.method=function(){} var myArray=[1,2,4]; myArray.name="陣列"; for (var

JS建構函式普通函式的區別JS建構函式、原型和例項的關係

JS中建構函式與普通函式的區別: https://www.cnblogs.com/cindy79/p/7245566.html JS建構函式、原型和例項的關係: https://blog.csdn.net/u012443286/article/details/78823955 Java

js雙等號三等號的區別

首先,== equality 等同,=== identity 恆等。   ==, 兩邊值型別不同的時候,要先進行型別轉換,再比較。  ===,不做型別轉換,型別不同的一定不等。  一言以蔽之:==先轉換型別再比較,===先判斷型別,如果不是同一型別直接為false。   

JS的onloadjQuery的ready區別

jQuery的執行機制(onload與ready的區別) 結論得出前自行測試: 為了測試是否真如所說的那樣,所以在頁面插入了20000張照片,照片數量少得不出什麼結論,所以改用console.log

簡述js for in for of 區別

for in是ES5標準,遍歷key. for of是ES6標準,遍歷value. for (var key in arr){ console.log(arr[key]); } for

JavaScriptstyle.leftoffsetLeft的使用及區別詳解

如果父div的position定義為relative,子div的position定義為absolute,那麼子div的style.left的值是相對於父div的值,這同offsetLeft是相同的,區別在於:1. style.left 返回的是字串,如28px,offsetL

jsoffsetLeft/offsetTopjqoffset().left/offset().top的區別

1.offsetLeft/offsetTop 在頁面任一元素的offsetLeft總是找到離其最近的已經定位的父元素或祖先元素定位,如果沒有,就根據根節點body定位,然後獲取其left值。 2.offset().left/offset().top 返回或設定匹

比較 width offsetwidth區別

比較width 與 offsetWidth 的區別 1、offsetWidth > width element.offsetWidth = element.style.width + element.style.padding + element.

JSstyle.display和style.visibility的區別

在JS中可以通過設定style.display或者style.visibility屬性來控制元素是否顯示,在style.display=block和style.visibility=visible的時候,元素被顯示,在style.display=none和style.vis

Node.jsrequest模組http模組之間的區別

原文https://stackoverflow.com/questions/27783806/what-is-the-difference-between-request-and-http-modules-in-node-js http包含對原生HTTP協議的支援而requ

style.widthoffsetwidth區別

當我使用JS的時候 , 我發現有時候用style.width不能獲取元素的值. 後面我才明白 style.width只能獲取當前元素的行間樣式,不能獲取元素的內部樣式 當你的width或者height寫在CSS樣式中的時候,在JS裡你的style不能獲取到width,

JSisPrototypeOf 和hasOwnProperty 的區別

另一個 strong 是否 指定 不同 名稱 功能 成員 eof 1、isPrototypeOf isPrototypeOf是用來判斷指定對象object1是否存在於另一個對象object2的原型鏈中,是則返回true,否則返回false。 格式如下: object1.is

js substr(), substring(), slice()的區別

高級程序設計 方法 負數 截取字符串 一個 cnblogs tro 所有 程序設計 一、作用   三者都是基於原字符串創建新字符串的方法。   接收一到兩個參數,第一個參數截取字符串的開始位置(字符下標,從0開始),第二個參數因方法不同而不同,後面不同點會說到。   另外,

jsundefined和null的區別

常常 html exist tex 輸出 output 為什麽 hive 存在 轉自:http://www.cnblogs.com/eastday/archive/2010/03/03/1677324.html 在JavaScript中存在這樣兩種原始類型:Null與Und

jseval()和$.parseJSON()的區別

16px 異常 comment 而不是 str on() ajax 鏈接 強制 之前自己一直對ajax不是特別的熟悉,所以一般都很少用這個去寫功能,但是最近這個項目中用到了,用ajax異步傳數據,json傳數據這個時候就需要去解析傳過來的數據了,eval()和$.parse

JsJSON.stringify()JSON.parse()eval()詳解及使用案例

div 網絡 blog 處理 ive asc 還要 ava 不同 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。因為采用獨立於語言的文本格式,也使用了類似於C語言家族的習慣,擁有了這些特性使使JSON稱為理想的數據交換語言,作用