最近因为工作需要,仔细研究了一下关于JS下offsetLeft,style.left,以及jquery中的offset().left,css("left")的区别。

JS下的offsetLeftstyle.left,以及jquery的css("left"),对定位的理解相似,如果父元素中有定位元素,都是相对于上一个定位元素(position不为static)定位。

值得一提的是如果没有已经定位的父元素,那么offsetLeft指向的是文档(document)的左边缘,而style.leftcss("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)的区别。相关推荐

  1. jQuery中hover与mouseover和mouseout的区别分析

    本文实例分析了jQuery中hover与mouseover和mouseout的区别.分享给大家供大家参考,具体如下: 以前一直以为在jquery中其实mouseover和mouseout两个事件等于h ...

  2. jQuery中 parent child 与 ance desc 的区别

    jQuery中< parent > child >与< ance desc >的区别 (1)< ance desc > 使用$("ance desc ...

  3. [jQuery] 谈一下Jquery中的bind(),live(),delegate(),on()的区别?

    [jQuery] 谈一下Jquery中的bind(),live(),delegate(),on()的区别? 在我们深入了解这些方法之前,我们先来一段常见的的HTML,作为我们编写jquery示例方法使 ...

  4. JQuery 中load、ready 和 onload 的区别

    $(document).ready() 和 window.onload 在表单上看都是页面加载时我们就去执行一个函数或动作,但是在具体的细节上 $(document).ready() 和 window ...

  5. jQuery中$(document).ready()和window.onload的区别

     $(document) ready()和window onload在表面上看都是页面加载时我们就去执行一个函数或动作,但是在具体的细节上$(document) ready()和window onlo ...

  6. jquery 中 $(document).ready() 与window.onload 的区别

    Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的. 1.执行时间 windo ...

  7. jQuery中的$(window)与$(document)的用法区别

    [window对象] 它是一个顶层对象,而不是另一个对象的属性,即表示浏览器中打开的窗口. 1.属性 defaultStatus 缺省的状态条消息 document 当前显示的文档(该属性本身也是一个 ...

  8. jquery 中后代遍历之children、find区别

    jquery 中children.find区别 首先看一段HTML代码,如下: 1 <table id="tb"> 2 <tr> 3 <td>0 ...

  9. html中prependid的作用,jQuery中append(),prepend()与after(),before()的区别

    在jQuery中,添加元素的方法有append(),prepend和 after(),before()两种共四个.但很多人对他们的使用有点混淆,今天就来分析一下.append()和prepend()的 ...

最新文章

  1. 在html中引入css、js和jQuery的方法
  2. 在VS2005的工具箱中增加SharePoint的活动
  3. Nuc972使用NandFlash时,uboot所需要的改动
  4. maven netty 配置_网络编程(二)Netty编程之一
  5. 【Java 基础】枚举、包装类、Math、Radnom、UUID、格式化、DecimalFormat、高精度计算(BigDecimal)
  6. android确定工作日,如何确定某个月的最后一个工作日?
  7. 毕业一年后我转行NLP 这几点宝贵经验分享给大家
  8. 选课系统 mysql_「选课系统」我的数据库大作业——学生选课系统实现(准备) - seo实验室...
  9. java使用zpl指令在Zebra打印机上打印条形码
  10. java中文件路径的两种写法说明:左斜杠(/)和右斜杠(\)
  11. 学习js的第十三天【事件的绑定方式,执行方式】
  12. 网店三大要素:产品、运营与品牌
  13. xcode Unable to install xxx
  14. 深度学习训练数据打标签过程
  15. 06.实模式进入保护模式
  16. git/svn reset/revert 回滚到服务器上的某一个版本
  17. GC9A01-TFT屏幕驱动(整理有stm32/51单片机/arduino等驱动代码)
  18. 微信ibeacon使用场景步骤总结
  19. 微雪树莓派PICO笔记——4. ADC(模拟数字转换器)
  20. 20种让脸美白的简单方法

热门文章

  1. 减轻学生过重课业负担的规定
  2. su:密码正确,但权限被拒绝
  3. Meltdown 论文翻译
  4. 现在买5G手机你考虑好了吗?
  5. 百度搜索限定时间_看别人用百度搜东西,让我怀疑自己用了假的百度
  6. Ubuntu下图片转pdf和pdf合并
  7. win10计算机管理的作用,原来Windows 10还有这么多隐藏的功能
  8. 程序员的 Python“劝退”指南!
  9. 学java被“劝退”的第七天
  10. 戴尔电脑如何设置快速开机