標籤:type 知識庫 tar stat 否則 lang doctype 1.3 單位
JS下offsetLeft,style.left,以及jQuery中的offset().left,css("left")的區別。
JS下的
offsetLeft和
style.left,以及jquery的
css("left"),對定位的理解相似,如果父元素中有定位元素,都是相對於上一個定位元素(position不為static)定位。值得一提的是如果沒有已經定位的父元素,那麼
offsetLeft指向的是
文檔(document)的左邊緣,而
style.left與
css("left")指向的是
body的左邊緣,如果body預設存在margin的話,他們取得的值是不一樣的。 此外老生常談,css("left")和style.left是帶單位"px"的,而offsetLeft沒有單位,另外,style.left必須是內聯樣式,或者在JS中通過style.left賦值,否則取得的將為空白字串(在內部樣式和外部樣式中指定left是無效的)。而jquery的css("left")沒有這一限制,顯然使用jquery操作dom的優勢就體現出來了。 最後是jquery的offset().left,它永遠是相對於文檔的左邊緣(往往體現為瀏覽器的左邊緣)定位的,這樣的話使用jquery就可以在不同的應用情境採用不同的方法來擷取元素的位置,相比較原生JS有巨大的優勢。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
body{
margin:50px;
/**/
}
.wrap{
width:300px;
height: 300px;
background-color: red;
left:200px;
position:relative;
}
.inner{
position: absolute;
width: 100px;
height: 100px;
left: 50px;
background-color: blue;
}
</style>
<script type="text/javascript" src="js/lib/bootstrap/js/jquery-1.11.3.js"></script>
</head>
<body>
<div class="wrap" id="wrap" style="left:200px;">
<div class="inner" id="inner">
</div>
</div>
<script type="text/javascript">
console.log($(".wrap").css("left")); /*如果父元素中有定位元素,都是相對於上一個定位元素(position不為static)定位。此處相對於body的左邊,有單位 200px*/
console.log($(".wrap").offset().left); /* 它永遠是相對於文檔的左邊緣(往往體現為瀏覽器的左邊緣)定位的 沒有單位 249.9999999 */
console.log(document.getElementById("wrap").offsetLeft); /*如果沒有已經定位的父元素,那麼offsetLeft指向的是文檔(document)的左邊緣 沒有單位 250*/
console.log(document.getElementById("wrap").style.left); /*style.left與css("left")指向的是body的左邊緣* 有單位 200px/
console.log($(".inner").css("left")); /* 相對於上一個定位元素 50px */
console.log($(".inner").offset().left); /*文檔的左邊緣 沒有單位 300*/
console.log(document.getElementById("inner").offsetLeft); /*相對於上一級 沒有單位 50*/
// console.log("如果style.left沒有在內聯樣式中指定:"+document.getElementById("inner").style.left);
</script>
</body>
</html>
$(".wrap").css("left") 200px
$(".wrap").offset().left 250
document.getElementById("wrap").offsetLeft 250
document.getElementById("wrap").style.left 200px
$(".inner").css("left") 50px
$(".inner").offset().left 300
document.getElementById("inner").offsetLeft 50
// 總結 :1.帶有offset的就沒有單位 px ,js中的 offsetLeft沒有單位,jquery中的offset()沒有單位,其他有單位
// 2.jquery的offset().left,它永遠是相對於文檔的左邊緣,不是body!!!
JS下offsetLeft,style.left,以及jQuery中的offset().left,css("left")的區別。