关于JS下offsetLeft,style.left,以及jquery中的offset().left,css(left)的区别。
最近因为工作需要,仔细研究了一下关于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就可以在不同的应用场景采用不同的方法来获取元素的位置,而如果你要像原生的offsetLeft一样,相对父元素来获取位置,也可以使用position().left方法来获取,两个需求兼顾,十分方便。
下面贴出了测试代码和图片,特意给body设置了一个margin来让大家理解相对于文档和body的定位差别。
样式和结构以及JS代码都放在一起了,方便大家拿走测试。
以下是代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style type="text/css">body{margin:20px;}.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="http://libs.baidu.com/jquery/2.0.3/jquery.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"));console.log($(".wrap").offset().left);console.log(document.getElementById("wrap").offsetLeft); console.log(document.getElementById("wrap").style.left);console.log($(".inner").css("left"));console.log($(".inner").offset().left);console.log(document.getElementById("inner").offsetLeft); console.log("如果style.left没有在内联样式中指定:"+document.getElementById("inner").style.left);</script>
</body>
</html>
以下是结果图片:
本文纯属个人观点,要是有写的不对的地方,欢迎大家提出来一起讨论。谢谢!
关于JS下offsetLeft,style.left,以及jquery中的offset().left,css(left)的区别。相关推荐
- jQuery中hover与mouseover和mouseout的区别分析
本文实例分析了jQuery中hover与mouseover和mouseout的区别.分享给大家供大家参考,具体如下: 以前一直以为在jquery中其实mouseover和mouseout两个事件等于h ...
- jQuery中 parent child 与 ance desc 的区别
jQuery中< parent > child >与< ance desc >的区别 (1)< ance desc > 使用$("ance desc ...
- [jQuery] 谈一下Jquery中的bind(),live(),delegate(),on()的区别?
[jQuery] 谈一下Jquery中的bind(),live(),delegate(),on()的区别? 在我们深入了解这些方法之前,我们先来一段常见的的HTML,作为我们编写jquery示例方法使 ...
- JQuery 中load、ready 和 onload 的区别
$(document).ready() 和 window.onload 在表单上看都是页面加载时我们就去执行一个函数或动作,但是在具体的细节上 $(document).ready() 和 window ...
- jQuery中$(document).ready()和window.onload的区别
$(document) ready()和window onload在表面上看都是页面加载时我们就去执行一个函数或动作,但是在具体的细节上$(document) ready()和window onlo ...
- jquery 中 $(document).ready() 与window.onload 的区别
Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的. 1.执行时间 windo ...
- jQuery中的$(window)与$(document)的用法区别
[window对象] 它是一个顶层对象,而不是另一个对象的属性,即表示浏览器中打开的窗口. 1.属性 defaultStatus 缺省的状态条消息 document 当前显示的文档(该属性本身也是一个 ...
- jquery 中后代遍历之children、find区别
jquery 中children.find区别 首先看一段HTML代码,如下: 1 <table id="tb"> 2 <tr> 3 <td>0 ...
- html中prependid的作用,jQuery中append(),prepend()与after(),before()的区别
在jQuery中,添加元素的方法有append(),prepend和 after(),before()两种共四个.但很多人对他们的使用有点混淆,今天就来分析一下.append()和prepend()的 ...
最新文章
- 在html中引入css、js和jQuery的方法
- 在VS2005的工具箱中增加SharePoint的活动
- Nuc972使用NandFlash时,uboot所需要的改动
- maven netty 配置_网络编程(二)Netty编程之一
- 【Java 基础】枚举、包装类、Math、Radnom、UUID、格式化、DecimalFormat、高精度计算(BigDecimal)
- android确定工作日,如何确定某个月的最后一个工作日?
- 毕业一年后我转行NLP 这几点宝贵经验分享给大家
- 选课系统 mysql_「选课系统」我的数据库大作业——学生选课系统实现(准备) - seo实验室...
- java使用zpl指令在Zebra打印机上打印条形码
- java中文件路径的两种写法说明:左斜杠(/)和右斜杠(\)
- 学习js的第十三天【事件的绑定方式,执行方式】
- 网店三大要素:产品、运营与品牌
- xcode Unable to install xxx
- 深度学习训练数据打标签过程
- 06.实模式进入保护模式
- git/svn reset/revert 回滚到服务器上的某一个版本
- GC9A01-TFT屏幕驱动(整理有stm32/51单片机/arduino等驱动代码)
- 微信ibeacon使用场景步骤总结
- 微雪树莓派PICO笔记——4. ADC(模拟数字转换器)
- 20种让脸美白的简单方法