jQuery的offset()和position()用法详解

offset()和position()用法详解:

这两个方法非常的常用,同时掌握起来有些困难,下面就介绍一下这两个方法的用法。

下面先看一下它们基本的定义:

1.offset()方法的定义:

此方法获取或者设置匹配元素在当前document的相对偏移。

此方法只对可见元素有效。

当获取偏移量时,方法的返回值是一个包含两个整型属性(top和left)的对象。

设置偏移量时,此方法的参数是带有top和left属性的对象。

具体用法可以参阅jQuery的offset()方法一章节。

2.position()方法的定义:

获取匹配元素相对父元素的偏移。

返回的对象包含两个整形属性(top和left)的对象。

为精确计算结果,请在补白、边框和填充属性上使用像素单位。

此方法只对可见元素有效。

具体用法可以参阅jQuery的position()方法一章节。

但是此方法并非只有定义的那么简单,在实际应用中,它的返回值也并非只是获取匹配元素相对父元素的偏移量。

实际上position()方法是将元素以CSS的绝对定位来处理,也就是position属性值为absolute(当然并不是将元素的的定位方式真的设置为绝对定位),这个时候它的定位参考对象准确的来说应该是距离它最近的一个拥有定位的父元素,和CSS的绝对定位的原则是一样的,可以参阅position绝对定位以哪个对象为参考一章节。

代码实例如下:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="http://www.51texiao.cn/" />
<title>offset()和position()用法详解-蚂蚁部落</title>
<style type="text/css">
body{
  margin:15px;
  width:960px;
}
.parent{
  border:3px solid #ccc;
  width:600px;
  height:300px;
  margin-left:55px;
  padding:25px;
}
.child{
  background:#666;
  width:200px;
  height:200px;
  color:#fff;
}
.copyright{
  position:absolute;
  right:0;
}
</style>
<script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(document).ready(function(){
  $(".child").each(function(){
    var text = "position().left="+$(this).position().left;
    text +="<br>position().top="+$(this).position().top;
    text +="<br>offset().left="+$(this).offset().left;
    text +="<br>offset().top="+$(this).offset().top;
    text +="<br>其parent的offset().top="+$(this).parents(".parent").offset().top;
    text +="<br>其parent的offset().left="+$(this).parents(".parent").offset().left;
    $(this).html(text);
  })
})
</script>
</head>
<body>
<div class="parent" style="float:right">
  父容器的position是默认值,static。子容器的position为默认值,static。offset和position值相同
  <div class="child"></div>
</div>
<div style="clear:both"></div>
<div class="parent" style="position:relative">
  父容器的position是相对定位ralative,子容器的position为默认值static。offset和position值不同
  <div class="child"></div>
</div>
<br/>
<div style="position:absolute;padding:15px;border:3px solid #ff0000;">
  <div class="parent">
    祖父容器的position是绝对定位absolute,子容器的position为默认值static。offset和position值不同
    <div class="child"></div>
  </div>
</div>
</body>
</html>

最后总结:
1.offset()方法获取的是匹配元素相对于文档的偏移量,和对象本身和父元素的定位方式是无关的。
2.position()方法稍稍复杂一些:
1).如果祖辈元素中有采用绝对定位或者相对定位者,则此方法获取的偏移量将以最近的采用定位的的祖辈元素为参考。
2).如果祖辈元素中没有采用绝对定位或者相对定位者,则此方法获取的偏移量将以窗口为参考对象。

时间: 2024-10-15 02:23:16

jQuery的offset()和position()用法详解的相关文章

jquery事件之event.target用法详解

1. 定义和用法: 显示哪个 DOM 元素触发了事件: $("p, button, h1, h2").click(function(event){ $("div").html("Triggered by a " + event.target.nodeName + " element."); }); 定义和用法 target 属性规定哪个 DOM 元素触发了该事件. 语法 event.target参数 描述 event 必需.规

Jquery表单插件ajaxForm用法详解

插件主要的方法: ajaxFormajaxSubmitformToArrayformSerialize fieldSerializefieldValueclearFormclearFieldsresetForm 示例代码: ? 1 2 3 4 5 6 7 // wait for the DOM to be loaded $(document).ready( function () {      // bind 'myForm' and provide a simple callback func

jQuery.trim() 函数及trim()用法详解

先要明确,原生js里不含有trim()方法.如果你觉得有,那一定是记成Java里了. 解决方法如下所示: 1.使用JQuery提供的$.trim([要操作的对象]); 2.自己封装一个方法进行空白字符的截取. 这里只用第一种方法,jQuery自带的trim jQuery.trim()函数用于去除字符串两端的空白字符.该函数可以去除字符串开始和末尾两端的空白字符(直到遇到第一个非空白字符串为止).它会清除包括换行符.空格.制表符等常见的空白字符. 该函数属于全局的jQuery对象. 语法 jQue

jQuery 事件用法详解

jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jquery中文文档 简介 jquery 之所以成为最受欢迎的前端库,很大一部分是得益于它的事件具有良好的语义,优秀的兼容性,并且便于管理和扩展. 在这里我会介绍 jquery 事件的一些比较基础的用法. 实现原理 jquery 事件脱胎于浏览器的 addEventListener (W3) 和 attac

jquery之insertBefore(),insertAfter(),prependTo(),appendTo()用法详解

导航: 1,insertBefore(),insertAfter(),prependTo(),appendTo()这四个函数用法几乎一样 2, 与之相对的有四个函数:Before(),After(),prepend(),append() 1,jQuery.insertAfter() 函数详解(其他三个参考其用法) insertAfter()函数用于将当前所有匹配元素插入到指定元素之后. 与该函数相对的是insertBefore()函数,用于将当前所有匹配元素插入到指定元素之前. 该函数属于jQu

jQuery Validate插件 reomte用法详解

在用户注册时经常要通过ajax请求判断用户账号是否已注册,最方便的方法便是用jQuery Validate插件 reomte方法 Jquery Validate插件, 调用远程方法验证参数, remote的用法: 在validate的方法上加入remote:"校验方法",例如:remote: "/test/checkAccount.jsp", 这时传进checkAccount.jsp的参数就是account=$("#account").val()

jQuery的bind()方法用法详解

bind()方法用法详解: 此方法是使用比较频繁的方法之一,虽然在API手册上有着对方法的介绍,但是由于语言简短,例子不够详细,可能会造成不能够完全准确的掌握bind()方法的使用,下面就结合实例介绍一下此方法的使用. 语法格式: $(selector).bind(type,[data],function(eventObject)) 此方法可以为所有匹配元素的特定事件绑定事件处理函数,例如: <!DOCTYPE html> <html> <head> <meta

jquery ajax 的 $.get()用法详解

js文件 $(document).ready(function(){ $("form").submit(function(event) {event.preventDefault()})//取消submit的默认行为 $("form input[type='submit']").click(function(){ var url = $('form').attr('action'); // 取Form中要提交的链接 var param = {}; // 组装发送参数

js的offsetParent属性用法详解

js的offsetParent属性用法详解:此属性是javascript中较为常用的属性,对于它的良好掌握也是非常有必要的,下面就通过代码实例介绍一下它的用法,希望能够给需要的朋友带来一定的帮助.一.基本介绍:此属性可以返回距离指定元素最近的采用定位(position属性值为fixed.relative或者absolute)父级元素,如果父级元素中没有采用定位的元素,则返回body对象的引用.语法结构: obj.offsetParent 二.代码实例: <!DOCTYPE html> <