Jquery的dom操作与原生dom的转换

本片文章包含了

  • jquery常见dom操作、
  • q与原生dom对象的区别与转换
  • 伪数组对象的知识

如有错误,烦请指正。

以下方法共性:可以一次添加多个内容,内容可以是DOM对象、HTML string、 jQuery对象

创建元素

var obj = $(‘<div class="test"><p><span>Done</span></p></div>‘);

两种方法可以创建元素

  1. 直接写入html
  2. 传入一个原生dom

添加元素

append()

可以传入dom对象,html string,jq对象等等;传到尾部;

appendTo()

与前者相比,主次不同;这里是将孩子添加到某个父元素中;

prepend()

append()相似,但是是传入到头部;

prependTo

主次关系同appendTo();

before()after()

在对象前面/后面,与对象并列同级的位置插入内容,参数类型和append()相同;

insertBefore()insertAfter()

before()主次不同,把xx插入到xx前面;

.remove()

可以传入一个选择器进行过滤,删除被选元素和所有自元素;

.empty()

删除调用该方法的元素下所有子元素,调用元素本身不删除;

包裹

.wrap()

为调用这个api的对象包裹一层html结构;可以传入selector,element,jq对象,html string等等;

wrapAll()wrapInner()

这两个api是wrap()的延伸,前者将整个选取的对象包裹起来;后者在选取的对象内部套一层;

unwrap()

这个方法将移出元素的父元素。这能快速取消 .wrap()方法的效果。将匹配的元素(以及他们的同辈元素)DOM结构的上一层父元素剥离出去;

HTML相关

html()

可读写的api,即没有参数时,可读取元素的innerHTML,当传递了string参数,则修改元素的innerHTML

$("p").html("Hello <b>world</b>!");

这种可读写的api是jquery的重要设计思想,后续会有很多类似的方法;

text()

可读写,操作dom的innerText

val()

返回或设置元素值,处理input的value属性值等;

jq与原生dom对象的区别与转换

dom对象是我们用原生js获得的对象,jQuery对象就是用jQuery的类库选择器获得的对象。jQuery对象是它本身独有的,和原生对象不可混用,同样,dom对象也不可以混用jq对象的方法!

比如,以下两行代码的作用是相同的

$("#color").html();
document.getElementById("color").innerHTML;

$("#id").innerHTML; // 错误写法

jq对象 > dom

jquery提供了两个方法可以实现jq对象转换为dom对象,即[index]get(index),因为jquery对象实际上是伪数组对象!

var $cr = $("#cr"); //jquery对象
var cr = $cr[0]; //dom对象,也可写成 var cr= $cr.get(0);
alert(cr.checked); //检测这个checkbox是否给选中

dom对象 > jq对象

对于一个dom对象,只需要用$()把dom对象包装起来,就可以获得一个jquery对象了,方法为$(dom对象);

复制代码 代码如下:

var cr = document.getElementById("cr"); //dom对象
var $cr = $(cr); //转换成jquery对象

伪数组对象

我们再进一步探讨下jquery对象与dom对象的转换的细节。

在jQuery的中有一个包装集概念,包装集就是用伪数组实现的。先看下正常的数组的定义及遍历:

var arr = [‘iceman‘ , ‘mengzhe‘ , ‘shoushou‘ , ‘zhuzhu‘];
for (var i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}

执行结果依次输出四个属性,这是最为正常的数组遍历:用字面量的形式定义了一个数组,并且添加几个简单的字符串,以及遍历输出每一项,这个在JavaScript中是再正常不过了。那么,什么是伪数组呢?.... 就是用对象来模拟的!

var objArr = {
    0 : ‘iceman‘,
    1 : ‘mengzhe‘,
    2 : ‘shoushou‘,
    3 : ‘zhuzhu‘,
    length : 4
}
for (var i = 0; i < objArr.length; i++) {
    console.log($objArr[i]);
}

执行结果还是依次输出了四个属性。

以上代码中以对象字面量的形式定义了一个对象objArr,这个对象就用来模拟数组,即伪数组对象,在$arr中要伪装的数组项以数字0、1、2...为键,值便是原数组的值。

js中获取一个对象的属性值可以使用obj.prop或者obj[‘prop‘],当对象字面量中键是以数字开头的时候,用obj[‘prop‘]获取值的时候可以不加引号,即obj[prop],在上面的实例中就是objArr[1]、objArr[2]、objArr[3]....

看到这里有没有一种很似曾相识的感觉呢? 前面说到,jQuery对象转原生DOM对象的其中一种方式是:jQuery对象[0],和以上的对象字面量中键是数字的形式是不很像呢? 另外多说一句,jQuery对象.get(0)的内部使用的就是jQuery对象[0]来实现的。

伪数组验证

jQuery使用选择器获取的对象会被包装为一个包装集,该包装集的内部实现就是使用伪数组对象:

通过打断点的方式,用选择器获取的所有的确都封装了一个伪数组对象。所以使用$divs[0]获取的就是$divs对象中的键为0的div元素,即第一个div元素。

$divs[0]get()获取的是第一个,并且获取的是原生的DOM对象,那么如果用选择器只获取到了一个元素,那么用$divs[0]获取的就是该元素的原生DOM对象,这就是jQuery对象转为原生DOM对象。

有了上文的理解,原生DOM对象转jQuery对象理解起来就简单多了,$(原生DOM对象)的方式可以将原生DOM对象转为jQuery对象,其实$是一个方法,原生的DOM对象传入$方法中,该方法内部对原生DOM对象做进一步的加工, 使其成为一个包装集,即伪数组对象。

原文地址:https://www.cnblogs.com/CharmanderS5/p/9057443.html

时间: 2024-08-02 23:06:11

Jquery的dom操作与原生dom的转换的相关文章

用dom操作样式和dom事件

1.样式表的操作 1.1获取样式表: var cssRules = document.styleSheets[0].cssRules //DOM规范 document.styleSheets[0].rules //IE 1.2获取最终样式 var divEle = document.getElementById("divId"); var backgroundColor = divEle.currentStyle.backgroundColor; //IE var background

DOM操作表格——HTML DOM

html创建表格: <table berder='1' width='300'> <thead> <tr> <th>姓名</th> <th>性别</th> <th>年龄</th> </tr> </thead> <tbody> <tr> <th>tzr</th> <th>男</th> <th>2

jquery中的DOM操作

DOM操作分为:DOM核心.HTML-DOM.CSS-DOM 1.节点操作 查找 查找元素节点:jquery选择器 查找属性节点:attr("")方法,参数为要查询的属性的名字 创建 创建元素节点:$("html")方法,参数为HTML标记字符串,如:<p></p> 注意:(1)动态创建的新元素节点不会被自动添加到文档中,需要用其他方法插入文档中(2)创建元素时注意标签闭合,可以用$("<p></p>&quo

Jquery基础之DOM操作

 一.jQuery对象与Dom对象的区别 一直以来对于通过jQuery方式获取的对象使不能直接使用JavaScript的一些方法的,开始的时候不理解,现在此案知道,原来jQuery获得的对象并不和我们平时使用getElementById获得的对象是一样的对象.所以一些新手就很迷惑,为什么${”#Element”}不能直接innerHTML,这就是原因所在,解决方式请看下文. jQuery对象与dom对象的转换只有jquery对象才能使用jquery定义的方法.注意dom对象和jquery对象是有

JQuery学习笔记-JQuery的DOM操作

DOM(Document Object Model 文档对象模型):一种与浏览器.平台.语言无关的接口,使用该接口可以轻松地访问页面中所有的标准组建 DOM操作的分类 -DOM Core : DOM Core并不专属于JavaScript,任何一种支持DOM的程序设计语言都可以使用.它的用途并非仅限于处理网页,也可以用来处理任何一种是用标记语言编写出来的文档,如XML -HTML DOM:使用JavaScript和DOM为HTML文档编写脚本时,有许多专属于HTML-DOM的属性 -CSS-DO

jQuery DOM操作-查询、创建、插入元素

DOM操作分类: DOM Core-处理任何一种使用标记语言编写出来的文档. DOM HTML-提供简明的记号来描述HTML元素及属性. DOM CSS-针对CSS的操作,主要用于获取和设置style对象的各种属性. 初始页面代码: 1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYP

Js之浅谈dom操作

JavaScript之浅谈dom操作 1.理解dom: DOM(Document Object Model ,文档对象模型)一种独立于语言,用于操作xml,html文档的应用编程接口. 怎么说,我从两个角度理解: 对于JavaScript,为了能够使JavaScript操作Html,JavaScript就有了一套自己的dom编程接口. 对于Html,dom使得html形成一棵dom树,类似于一颗家族树一样,一层接一层,子子孙孙. 所以说,有了DOM,在我看来就是相当于JavaScript拿到了钥

web性能优化--减少DOM操作(三)

减少DOM数量 减少DOM操作 批量处理DOM操作 批量处理样式修改 尽量不要使用tabel布局 尽量不要使用css表达式 string用数组join css选择符优化 1.减少DOM数量 在HTML生成DOM树的时候,DOM数量越少,HTML渲染速度越快 2.减少DOM操作 每次操作DOM,都会带来repaint和refolw 3.批量处理DOM操作: 将元素移除DOM Tree,修改完后再放回去,因此只会调用一次repaint或者reflow 4.批量修改样式 改变classname,或者用

认识JQuery,JQuery的优势、语法、多库冲突、JS原生对象和JQuery对象之间相互转换和DOM操作,常用的方法

(一)认识JQuery  JQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到一套定义好的方法    JQuery的主旨:以更少的代码,实现更多的功能 (二)JQuery的优势 1)可以像CSS一样访问和操作DOM 2)修改CSS控制页面外观 3)简化JS代码操作 4)事件代理更加容易 5)动画效果使用方便 6) Ajax技术更加完美 7)大量的基于Jquery的插件 8)可以自定义扩展功能插件 (三)JQuery的语法 格式:$(selector).actio