第三章 jQuery中的DOM操作

一、DOM操作的分类

DOM(document object model)是一种与浏览器、平台、语言无关的接口,使用该接口可以访问页面中的·所有组件。DOM的操作可以分为DOM Core、HTML-DOM和CSS-DOM。

  1. DOM Core:任意支持DOM的程序设计语言都可以使用。JS中getElementById(),getelementByTagName(),getAttribute()和setAttribute()都是它的组成部分。
  2. HTML-DOM:提供了一些更加简明的记号描述各种Html元素,只能用来处理web文档。eg:document.forms
  3. CSS-DOM:是针对CSS的操作,用于获取和设置style对象的各种属性。eg:element.style.color

二、jQueryDOM操作——节点操作

  • 查找节点

  1. 查找元素节点

可以直接使用选择器进行查找。

 var $li=$("ul li:eq(1)");   //获取ul中的第二个li节点
var li_text=$li.text(); //获取第二个li元素节点的文本内容
alert(li_text); //打印文本内容

2.查找属性节点

找到元素节点后,使用attr()方法获取设置元素的属性。attr()方法传入参数为一个时为获取该属性的值,传入2个参数是为为该属性设置值。

 var $para=$("p");                   //获取p节点
var pra_ti=$para.attr("class"); //获取p元素节点的class属性值
$para.attr("class","para"); //将p元素节点的class属性值设为para
  • 创建节点

  1. 创建元素节点

创建元素节点需要两步:1)创建一个新的元素节点 2)将该节点插入文档。$(html)方法可以根据传入的HTML标记字符串,创建一个DOM对象,并将该DOM对象包装成一个jQuery对象后返回。

PS:动态创建的新元素节点默认保存在内存中,不会被自动添加到文档中,需要使用其他方法将其插入文档。

 var $li=$("<li>我是新加的li节点</li>");   //创建一个新的元素节点
$("ul").append($li); //添加到ul使其在网页中显示

2.创建文本节点

创建文本节点也是使用$(html)方法,只需要将要添加的文本内容写入html字符串中即可。(无论html代码多复杂都可以使用$(html)方法)

3.创建属性节点

创建属性节点也是在创建元素节点时一起创建。

var $li=$("<li class='new_li'>我是新加的li节点</li>");   //创建一个新的li元素 包括元素节点、文本节点、属性节点
$("ul").append($li); //添加到ul使其在网页中显示
  • 插入节点

方法 描述 实例
append() 向元素内部追加内容

HTML代码:

<p>我想说:</p>

jQuery代码:

$("p").apppend("<b>你好</b>");

结果:

<p>我想说:<b>你好</b></p>

appendTo() 将元素加到指定的元素内部,$(A).sppendTo(B)是将A追加到B中

HTML代码:

<p>我想说:</p>

jQuery代码:

$("<b>你好</b>").apppendTo("p");

结果:

<p>我想说:<b>你好</b></p>

prepend() 向元素内部的前面加入内容

HTML代码:

<p>我想说:</p>

jQuery代码:

$("p").prepend("<b>你好</b>");

结果:

<p><b>你好</b>我想说:</p>

prependTo() 将元素加到指定元素内部的前面,$(A).prependTo(B)是·将A插到B中的前面

HTML代码:

<p>我想说:</p>

jQuery代码:

$("<b>你好</b>").prependTo("p");

结果:

<p><b>你好</b>我想说:</p>

after() 向元素后追加内容

HTML代码:

<p>我想说:</p>

jQuery代码:

$("p").after("<b>你好</b>");

结果:

<p>我想说:</p><b>你好</b>

insertAfter() 将元素追加到指定元素后,$(A).insertAfter(B)是将A追加到B后面

HTML代码:

<p>我想说:</p>

jQuery代码:

$("<b>你好</b>").insertAfter("p");

结果:

<p>我想说:</p><b>你好</b>

before() 向元素前追加内容

HTML代码:

<p>我想说:</p>

jQuery代码:

$("p").before("<b>你好</b>");

结果:

<b>你好</b><p>我想说:</p>

insertBefore() 将元素加到指定元素内部的前面,$(A).insertBefore(B)是·将A插到B前

HTML代码:

<p>我想说:</p>

jQuery代码:

$("<b>你好</b>").insertBefore("p");

结果:

<b>你好</b><p>我想说:</p>

  • 删除节点

  1. remove()方法

从DOM中删除所有匹配元素。使用remove()方法删除后,该节点所包含的所有后代元素将同时被删除。该方法返回值为一个指向已被删除节点的引用,可以在以后使用这些元素。

 var $li=$("ul li:eq(1)").remove();   //获取第二个li节点后把它从网页删除
$li.appendTo("ul"); //把删除的元素重新加入ul

这段代码其实等效于:

$("ul li:eq(1)").appendTo("ul");   //appendTo()方法也可以用来移动元素,移动元素时首先从文档上删除此元素,然后将该元素插入文档的指定节点

remove()方法也可以传递参数进行选择删除。eg:  $("ul li").remove("li[title!=菠萝]")

2.detach()方法

detach()与 remove()一样,也是从DOM中删除匹配的元素。但是这个方法不会把匹配的元素从jQuery对象中删除,所有绑定的事件、附加的数据都会被保留。

 $("ul li").click(function(){
alert($(this).html());
});
var $li=$("ul li:eq( 1)").detach(); //删除元素
$li.appendTo("ul"); //重新追加此元素,发现之前绑定的事件还在,如果使用remove()删除元素,之前绑定的事件将失效

3.empty()方法

严格来讲,他并不是删除节点的方法,而是清空节点,它能元素中的所有后代节点。

$("ul li:eq(1)").empty();   //获取第二个li节点后,清空此元素里的内容
  • 复制节点

$("ul li").click(function(){
$(this).clone().appendTo("ul"); //复制当前点击的节点并追加到ul中
});

clone()方法复制节点后,也是被保存在内存中,需要追加到文档。被复制的元素不具有任何行为,想要它也具有点击事件,可以:

$(this).clone(true).appendTo("body");  //传入参数true

在clone()方法中传入参数true,可以复制元素的同时复制元素中的绑定事件。

  • 替换节点

将所有匹配的元素都替换成指定的html或者DOM元素。

$("p").replaceWith("<strong>你不喜欢的水果是?</strong>");

2.replaceAll();

与replayWith()方法作用相同,只是操作颠倒。

$("<strong>你喜欢的水果是?</strong>").replayceAll("p");
  • 包裹节点

  1. wrap()

将某个节点用其它标记包裹,不会破坏原始文档的语义,将所有的元素进行单独的包裹。

$(“strong”).wrap("<b></b>");   //用b标签把strong元素包裹

得到的HTML结果:

<b><strong>你最喜欢的水贵是/</strong></b>
<b><strong>你最喜欢的水贵是/</strong></b>
<b><strong>你最喜欢的水贵是/</strong></b>

2. wrapAll()

将匹配的元素用一个元素包裹。

$("strong").wrapAll("<b></b>");

得到的HTML结果:

<b>
<strong>你最喜欢的水贵是/</strong>
<strong>你最喜欢的水贵是/</strong>
<strong>你最喜欢的水贵是/</strong>
</b>

3. wrapInner()

将每一个匹配的元素的子内容(包括文本节点)用其它结构化标记包裹起来。

$("strong").wrapInner("<b></b>");

得到的HTML结果:

<strong><b>你最喜欢的水贵是?</b></strong>

三、jQueryDOM操作——属性操作

  • 获取属性和设置属性

获取属性只需要给attr()传入一个参数,即属性名称。如果要设置属性值传入两个参数即属性名称和对应值。

var p_txt=$("p").attr("class");   //获取p的节点属性class
$("p").attr("class","para"); //设置p的节点属性class为para
$("p").attr({"class":"para","title":"test"}); //一次设置多个属性
  • 删除属性

使用removeAttr()方法删除。

四、jQueryDOM操作——样式操作

  • 获取和设置样式

可以使用attr()方法获取和设置样式。

  • 追加样式

使用addClass()方法追加样式。如果一个元素被添加了多个class值,相当于合并样式。如果有不同的class设定了同一样式属性,后者覆盖前者。

  • 移除样式

使用removeClass()从匹配元素中删除全部或指定class。可以以空格的方式删除多个class名。removeClass()不带参数时为删除所有class。

  • 切换样式

使用toggle()方法实现类似元素如果是隐藏则显示元素,如果元素是显示则隐藏元素的重复切换。toggleClass()实现添加、删除类名的重复切换。

  • 判断是否含有某个样式

hasClass()判断是否含有某个class,如果有返回true,没有返回false。

五、jQueryDOM操作——设置获取HTML、文本和值

  1. html()  读取或设置某个元素的HTML内容。

  2. text()  读取或设置某个元素的文本内容。
  3. val()    设置和获取元素的值,如果元素为多选则返回包含有选择的值的数组。

也可以使用val()方法使select、checkbox、radio相应选项被选中。eg:  $(":checkbox").val(["check2","check3"]);

五、jQueryDOM操作——遍历节点

  1. children()    获取匹配元素的子元素集合,只考虑子元素不考虑其他后代元素。
  2. next()        获取匹配元素后面紧邻的同辈元素。
  3. prev()        获取匹配元素前面紧邻的同辈元素。
  4. siblings()    获取匹配元素前后所有的同辈元素。
  5. closest()     取得最近的匹配元素。首先检查当前元素是否匹配,如果匹配则直接返回元素本身。如果不匹配则向上查找父元素,逐级向上直到找到匹配的元素。如果什么都没有则返回一个空的jQuery对象。
  6. parent()、parents()、closest()
方法 描述 示例
parent() 获取每个匹配元素的父级元素

$(".item-1").parent().css("color","red");

从指定类型的直接父节点开始查找。返回一个元素节点。

parents() 获取每个匹配元素的祖先元素

$(".item-1").parents().css("color","red");

从指定类型的直接父节点开始查找,找到第一个父节点继续查找。返回一个多个父节点。

closest() 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的祖先元素

$(".item-1").closest().css("color","red");

从包含自身的节点开始查找。返回匹配的第一个元素节点。

六、CSS DOM操作

CSSDOM操作就是读取和设置style对象的各种属性。可以通过css()方法获取元素的样式属性,无论该属性是外部css还是内联css都可以获取到。该方法中如果传入的值是数字将会被自动转化成像素值。

当你想获取元素高度时可以使用$("p").css("height")获取,同时jQuery也分装了专门的方法来获取元素的宽高。$("p").height()也可以去的元素的高度。

PS:  css()获取到的高度值与设置的值有关,可能会得到auto。而height()获取的是元素的实际高度,而且不带单位。

【锋利的jQuery】学习笔记03的更多相关文章

  1. 锋利的JQuery 学习笔记

    第一章                认识JQuery ·页面加载事件(可以写多个ready())$(document).ready(function(){alert(“hello world”);} ...

  2. 锋利的jquery学习笔记

    1.$("#tt")获取的永远都是一个jquery对象,所以要判断页面上是否存在某个对象不能像js中 if($("#tt")){ } 而是通过: ){ } ps ...

  3. 锋利的jQuery学习笔记之jQuery选择器

    在介绍jQuery选择器之前,先简单介绍一下CSS选择器---> 一.CSS选择器 常见的CSS选择器有以下几种: 选择器 语法 描述 示例 标签选择器 E{CSS规则} 以文档元素为选择符 t ...

  4. jQuery 学习笔记:jQuery 代码结构

    jQuery 学习笔记:jQuery 代码结构 这是我学习 jQuery 过程中整理的笔记,这一部分主要包括 jQuery 的代码最外层的结构,写出来整理自己的学习成果,有错误欢迎指出. jQuery ...

  5. jQuery学习笔记(一)jQuery选择器

    目录 jQuery选择器的优点 基本选择器 层次选择器 过滤选择器 表单选择器 第一次写博客,希望自己能够长期坚持,以写博客的方式作为总结与复习. 最近一段时间开始学习jQuery,通过写一个jQue ...

  6. jQuery 学习笔记

    jQuery 学习笔记   一.jQuery概述    宗旨: Write Less, Do More.    基础知识:        1.符号$代替document.getElementById( ...

  7. jQuery学习笔记(一):入门

      jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操 ...

  8. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  9. JQuery学习笔记——层级选择器

    JQuery学习笔记--层级选择器 上一篇学习了基础的五种选择,分别是id选择器,class选择器,element选择器,*选择器 和 并列选择器.根据手册大纲,这篇学习的是层级选择器. 选择器: 1 ...

  10. jQuery学习笔记之Ajax用法详解

    这篇文章主要介绍了jQuery学习笔记之Ajax用法,结合实例形式较为详细的分析总结了jQuery中ajax的相关使用技巧,包括ajax请求.载入.处理.传递等,需要的朋友可以参考下 本文实例讲述了j ...

随机推荐

  1. CCS3.3之DM642开发环境建立

    使用的仿真器是SEED-XDSUSB2.0/5V. 之前用的是CCS2.2,换成了CCS3.3的. 1.安装CCS3.3.38.在我安装完后,并没有急着升级,升级的程序是SR12_CCS_v3.3_S ...

  2. TeeChart的最小步长和最大步长

    /// <summary> /// 坐标轴的最大步长 /// </summary> public double MajorStep { get { return axis.Ca ...

  3. “net.tcp://localhost:9000/ObtainData”处带有协定“"IObtainData"”的 ChannelDispatcher 无法打开其 IchannelListener。

    http://stackoverflow.com/questions/1252791/how-to-solve-the-channeldispatcher-is-unable-to-open-its- ...

  4. XSS跨站脚本攻击在Java开发中防范的方法

    1. 防堵跨站漏洞,阻止攻击者利用在被攻击网站上发布跨站攻击语句不可以信任用户提交的任何内容,首先代码里对用户输入的地方和变量都需要仔细检查长度和对”<”,”>”,”;”,”’”等字符做过 ...

  5. Centos6.4 mysql安装与配置

    安装命令: yum install mysql #安装客户端 yum install mysql-server #安装服务器 yum install mysql-devel #安装开发库 安装完成后, ...

  6. AKKA初体验

    关于thread和actor下面这段话讲的很好Experienced developers have learned to be very careful with unrestricted thre ...

  7. JavaScript---网络编程(2)-函数与数组

    上节,学完循环了~ 现在学Javascript的函数和数组. JavaScript语法 每一种语言都有自己的语法规则,JS语法与Java很像,所以学习起来比较容易.JS中也一样有变量,语句,函数,数组 ...

  8. Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的

    在前两篇博文中已经做了铺垫,下面咱们就可以用前面介绍过的内容开始做一个小项目了(项目中会用到Afinal框架,不会用Afinal的童鞋可以先看一下上一篇博文),正所谓麻雀虽小,五脏俱全,这在里我会尽量 ...

  9. ZOJ Problem Set - 1025解题报告

    ZOJ Problem Set - 1025 题目分类:基础题 原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=10 ...

  10. Tornado自定义分布式session框架

    一.session框架处理请求执行的流程: 1.服务器端生成随机的cookie字符串 2.浏览器发送请求,服务器将cookie返回给浏览器. 3.服务器在生成一个字典.字典的key为cookie,va ...