每当创建一个新的元素(或者选择一个已经存在的元素)时,JQuery将返回一个元素的集合。大部分的开发人员新接触JQuery的时候,都把这个集合当做数组。这个集合中的DOM元素有从零开始的索引,这集合也包含了数组常用的方法和length属性,但是JQuery对象是比这更加复杂的。
  • DOM和DOM元素
    这里DOM表示的是一个HTML文档,它可能包含了许多的DOM元素,一个元素可以是一个页面内的一片东西,它包含了文本还有其他的DOM元素。也可以是一个单一的DOM元素由类型(标签)、属性等组成的。
    元素包含了许多的属性就像JavaScript对象那样,这些属性是唯一能进行网页交互的方式。
  • 操作元素
    事实上直接去操作元素是比较困难复杂的,JQuery定义了去多方法可以帮助开发者去更方便的操作元素。
    我们可以使用DOM方法来操作元素。
var target = document.getElementById( "target" );
target.innerHTML = "<td>Hello <b>World</b>!</td>";
var newElement = document.createElement( "div" );
target.parentNode.insertBefore( target.nextSibling, newElement )

但是由于浏览器兼容性问题,很多时候一些DOM方法会在某些浏览器中失效,这时我们可以使用JQuery的方法来操作元素,不但有效而且操作更加的方便。

var target = document.getElementById( "target" );
$( target ).html( "<td>Hello <b>World</b>!</td>" );
var newElement = document.createElement( "div" );
$( target ).after( newElement );
  • 获取元素到JQuery对象中
    当JQuery方法是通过CSS的选择被调用的时候,它将返回一个JQuery对象,包含了那些匹配选择器的元素。
// 选择所有的<h1>标签.
var headings = $( "h1" );

这里的headings是一个JQuery对象包含了这个页面上所有的h1标签,可以通过length属性查看它拥有h1标签的数量。

// 查看当前页面<h1>标签的数量
var allHeadings = $( "h1" );
alert( allHeadings.length );

如果页面中包含多个h1标签,则length显示的是h1标签的数量,如果页面中没有h1标签,则length为0。通过检查length属性可以确保选择器是否成功匹配了页面上的元素。

    如果我们想要的是多个元素中的第一个元素,那么我们有多种方法可以实现这一要求,例如使用.eq()方法。
// 选择第一个元素
var headings = $( "h1" );
var firstHeading = headings.eq( 0 );

现在firstHeading是一个JQuery对象包含了页面上第一个h1标签,并且因为它是一个JQuery对象,可以使用JQuery的方法。其中有一个.get()方法,返回的是元素本身,而不是JQuery包裹的元素。

// 选择第一个元素
var firstHeadingElem = $( "h1" ).get( 0 );

因为JQuery对像是一个类数组,所以它也支持通过数组下标来获取子项。

// 选择第一个元素
var firstHeadingElem = $( "h1" )[ 0 ];

firstHeadingElem包含了本地的DOM元素,这意味着它也包含了DOM元素的属性和方法,不过相比下来JQuery的方法使用起来更加方便。

  • JQuery对象不是按照===方式创建的
    需要注意的是每一个JQuery包裹的对象都是唯一的,即使对象是用相同的选择器创建或者引用相同的DOM元素。
// 创建两个JQuery对象拥有相同的元素。
var logo1 = $( "#logo" );
var logo2 = $( "#logo" );

虽然他们按照相同的方式创建,但是他们却是不同的对象。

// 比较2个对象
alert( $( "#logo" ) === $( "#logo" ) ); // false

无论如何,两个对象包含的是相同的元素,可以通过.get()方法进行比较,两者所包含的元素确实是相同的。

// 比较DOM元素
var logo1 = $( "$logo" );
var logo1Elem = logo1.get( 0 );
var logo2 = $( "#logo" );
var logo2Elem = logo2.get( 0 );
alert( logo1Elem === logo2Elem ); // true

无论使用怎样的命名约定,非常重要的一点是JQuery对象和DOM元素有很大不同,原生的DOM方法和属性在JQuery对象上是不存在的,反之亦然。

  • JQuery对象不是“活”的
    通过JQuery获取页面上所有的段落元素。
// 获取页面上所有的<p>元素
var allParagraphs = $( "p" );

所选元素的集合可能会发送变化,增加或者减少。然而JQuery对象所包含的这个元素集合不会自动的随之变化,如果文档发生了变化,那么需要重新创建一个JQuery对象来获取元素。

// 更新选择器
allParagraphs = $( "p" );
  • 包装
    虽然DOM提供的所有功能,可以创建出我们需要的交互式网页,但那样很麻烦。使用JQuery对象包装的元素就非常的容易。当使用JQuery来创建和选择元素时,元素都将被包装在一个新的JQuery对象中。如果需要使用本地DOM元素,可以使用.get()方法或数组下标的方式来获取元素。

JQuery官方学习资料(译):JQuery对象的更多相关文章

  1. JQuery官方学习资料(译):避免与其他库的冲突

    避免与其他库的冲突     JQuery库和它所有的插件都是包含在jQuery命名空间下的,作为一般规则,全局对象被存储在jQuery的命名空间内,所以你不会得到jQuery和任何其他库之间的冲突(例 ...

  2. JQuery官方学习资料(译):类型

    类型     JavaScript提供了多个内置数据类型.除了这些,这份文档还将介绍一些虚拟类型,例如选择器.伪类.事件等. String 在JavaScript中字符串是一个不可变的对象,它包含无. ...

  3. JQuery官方学习资料(译):遍历JQuery对象和非JQuery对象

        JQuery提供了一个对象遍历的Utility方法$.each()和一个JQuery集合遍历方法.each(). $.each()     $.each()是一个通用的方法用来遍历对象和数组, ...

  4. JQuery官方学习资料(译):使用JQuery的.index()方法

        .index()是一个JQuery对象方法,一般用于搜索JQuery对象上一个给定的元素.该方法有四种不同的函数签名,接下来将讲解这四种函数签名的具体用法. 无参数的.index() < ...

  5. JQuery官方学习资料(译):Utility方法

        JQuery提供了一些utility方法在$命名空间里,这些方法对完成常规的编程任务非常有帮助. $.trim()     删除前后部的空白内容. // 返回 "lots of ex ...

  6. JQuery官方学习资料(译):Data方法

        你可能经常会想需要通过元素来存储一些数据.在JavaScript中你可能需要给元素添加属性来实现这样的功能,但是在某些浏览器中,你可能还需要处理因此造成的内存泄露问题.JQuery提供了一个简 ...

  7. JQuery官方学习资料(译):CSS

        JQuery提供了一个处理方法,可以获取或设置元素的CSS属性. // 获取 CSS 属性 $( "h1" ).css( "fontSize" ); / ...

  8. JQuery官方学习资料(译):操作元素

      获取和设置元素的信息     有很多种方式可以改变现有的元素,最常见的是改变HTML内容或者元素的属性.JQuery提供了简单的夸浏览器的方法来帮助你实现元素信息的获取和设置. .html():获 ...

  9. JQuery官方学习资料(译):选择器的运作

    Getters 和 Setters     JQuery的方法重载,方法设置和获取值一般使用相同名称的方法,当一个方法用来设置一个值的时候称之为Setter,当一个方法用来获取一个值的时候称之为Get ...

随机推荐

  1. angular-控制器

    controller 控制器 四.作用域:($rootScope)对整个页面相当于全局变量 也就是只要是用$rootScope定的东西它一定是作用于全局,而其它的只是对它控制器所在的那一部分 列如: ...

  2. Centos6.5安装中文支持和中文输入法---VIM编辑器中文支持

    Centos6.5安装中文支持和中文输入法 第一步:中文支持:    在shell命令下输入: # vi  /etc/sysconfig/i18n 然后修改LANG="en_US.UTF-8 ...

  3. Redisson碰到的问题

    最近开发环境使用redisson(版本是2.8.0),在部署一段时间(半个小时左右),获取分布式锁会报超时异常(org.redisson.client.RedisTimeoutException: R ...

  4. Reids学习2 -- 使用Jedis操作Redis

    1. 如何获取Jedis 获取Jar包可以通过Maven库获取:http://mvnrepository.com/artifact/redis.clients/jedis 或者可以通过Maven配置: ...

  5. [转] Snapshotting with libvirt for qcow2 images

    http://kashyapc.com/2011/10/04/snapshotting-with-libvirt-for-qcow2-images/ Libvirt 0.9.6 was recentl ...

  6. Java中的NIO基础知识

    上一篇介绍了五种NIO模型,本篇将介绍Java中的NIO类库,为学习netty做好铺垫 Java NIO 由3个核心组成,分别是Channels,Buffers,Selectors.本文主要介绍着三个 ...

  7. JVM之虚拟机类加载机制

    有兴趣可以先参考前面的几篇JVM总结: JVM自动内存管理机制-Java内存区域(上) JVM自动内存管理机制-Java内存区域(下)     JVM垃圾收集器与内存分配策略(一) 我们知道,在编写一 ...

  8. 老罗最新发布了“子弹短信”这款IM,主打熟人社交能否对标微信?

    1.引言 2018年8月20日,锤子科技在北京召开了夏季新品发布会.除了新手机,发布会上还正式推出了主打语音功能的即时通讯IM聊天工具:子弹短信.这款工具此前今年早些时候在「鸟巢」发布会上初次亮相,在 ...

  9. Django项目settings配置redis连接

    CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", &q ...

  10. Git的初步学习

    前言 感谢! 承蒙关照~ Git的初步学习 为什么要用Git和Github呢?它们的出现是为了用于提交项目和存储项目的,是一种很方便的项目管理软件和网址地址. 接下来看看,一家公司的基本流程图: 集中 ...