jQuery封装了大量DOM操作的API,极大提高了操作DOM节点的效率。

1、查找节点

  通过我们上一节介绍了JQuery选择器,可以非常轻松地查找节点元素。不过,这时得到的是jQuery对象,只能使用jQuery的API。

  1.1  查找属性节点:attr()方法,可以接受一个参数,也可以接受两个。当参数是一个时,则是要查询的属性的名字,这里接受的是标签固有属性,非样式属性!

2、创建节点

  利用jQuery的 工厂函数$(),我们可以随意创建任何元素节点、文本节点、属性节点,然后赋值给一个(以$开头的)变量,最后通过jQuery元素节点的append()方法插入到文档中。例如:

 var $li = $("<li title='香蕉'>香蕉</li>");   //创建一个<li>元素
$("ul").append($li); //插入到文档中

3、插入节点

  前面使用了一个插入节点的方法append(),它会在元素内部追加新创建的内容。其实,插入节点的方法还有很多:

方法 描述 示例
append 向每个匹配的元素内部追加内容 HTML代码:<p>我想说:</p>
jQuery代码:$("p").append("<b>你好</b>");
结果:<p>我想说:<b>你好</b></p>
appendTo 将所有匹配的元素追加到指定的元素中。实际上,使用该方法颠倒了常规的$(A).append(B)。 参考上面的,结果相同,用法:$("<b>你好</b>").appendTo("p");
prepend 向每个匹配的元素内部前置内容 HTML代码:<p>我想说:</p>
jQuery代码:$("p").prepend("<b>你好</b>");
结果:<p><b>你好</b>我想说:<p>
prependTo 将所有匹配的元素前置到指定的元素中。实际上,使用该方法颠倒了常规的$(A).prepend(B)。 参考上面的,结果相同,用法:$("<b>你好</b>").prependTo("p");
after 在每个匹配的元素之后插入内容 HTML代码:<p>我想说:</p>
jQuery代码:$("p").after("<b>你好</b>");
结果:<p>我想说:<p><b>你好</b>
insertAfter 将所有匹配的元素插入到指定的元素后面。实际上,使用该方法颠倒了常规的$(A).after(B)。 参考上面的,结果相同,用法:$("<b>你好</b>").insertAfter("p");
before 在每个匹配的元素之前插入内容 HTML代码:<p>我想说:</p>
jQuery代码:$("p").before("<b>你好</b>");
结果:<b>你好</b><p>我想说:</p>
insertBefore 将所有匹配的元素插入到指定的元素前面。实际上,使用该方法颠倒了常规的$(A).before(B)。 参考上面的,结果相同,用法:$("<b>你好</b>").insertBefore("p");

4、删除元素

  如果文档中某一个元素多余,那么应该将其删除。jQuery提供了三种删除节点的方法,即remove()、detach()和empty()。

  4.1  remove()方法

  作用是从DOM中删除所有匹配的元素,传入的参数用于根据jQuery表达式筛选元素。例如:

 var $li = $("ul li:eq(1)").remove();  //获取第2个<li>元素节点后,将其移除
$li.appendTo("ul"); //把刚才删除的节点又重新添加到<ul>元素中
/*相当于下面的*/
$("ul li:eq(1)").appendTo("ul"); //appendTo()也可以用来移动元素 /*带参数的移除*/
$("ul li").remove("li[title != '菠萝']"); //将<li>中属性title不等于“菠萝”的移除

  

  4.2  detach()方法

  detach()和remove()一样,也是从DOM中去掉所有匹配的元素。但需要注意的是,这个方法不会匹配的元素从jQuery对象中删除,因而可以在将来使用这些匹配的元素。与remove()不同的是,所有绑定的事件、附加的数据都会保留下来。

  4.3  empty()方法

严格来讲,empty()方法并不是删除节点,而是清空节点,它能清空元素中的所有后代节点,包括自身的文本节点。

5、复制节点

  复制节点也是常用的DOM操作之一,利用clone()函数,我们就可以克隆一个同样的节点。例如:

 $("ul li").click(function(){
$(this).clone().appendTo("ul"); //复制当前单击的节点,并将它追加到<ul>元素中
})

  上面复制节点后,被复制的新节点不具有任何行为。如果需要新元素也具有同样的行为(这里指单击复制功能)。可以这样改:

$(this).clone(true).appendTo("body");  //注意参数true

6、替换节点

  如果要替换某个节点,jQuery提供了相应的方法:replaceWith()和replaceAll()。

  replaceWith()方法是将所有匹配的元素都替换成指定的HTML或者DOM元素。例如要将网页中"<p title="选择你最喜欢的水果">你最喜欢的水果是?</p>"替换成"<strong>你最不喜欢的水果是?</strong>",可以这样做:

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

  也可以使用另一种方法replaceAll()来实现,该方法与replaceWith()方法作用相同,只是颠倒了replaceWith的操作。

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

注意:如果在替换之前,已经为元素绑定事件,替换后原先绑定的事件将会与被替换的元素一起消失,需要在新元素上重新绑定事件。

7、包裹节点

  如果要将某个节点用其他标记包裹起来,jQuery提供了相应的方法,即wrap()。

 $("strong").wrap("<b></b>");  // 用<b>标签把<strong>元素包裹起来
/* 结果如下 */
<b><strong title="选择你最喜欢的水果.">你最喜欢的水果是?</strong></b>

  包裹节点操作还有其他俩个方法,即wrapAll()和wrapInner()。

  

  7.1  wrapAll()方法

  该方法将所有匹配的元素用一个元素来包裹。它不同于wrap()方法,wrap()方法是将所有的元素进行单独的包裹。

 <strong title="选择你最喜欢的水果.">你最喜欢的水果是?</strong>
<strong title="选择你最喜欢的水果.">你最喜欢的水果是?</strong> $("strong").wrap("<b></b>"); /* 结果如下 */
<b>
<strong title="选择你最喜欢的水果.">你最喜欢的水果是?</strong>
<strong title="选择你最喜欢的水果.">你最喜欢的水果是?</strong>
</b>

  注意:如果被包裹的多个元素中间有其他元素,其他元素会被放到包裹元素之后。

  7.2  wrapInner()方法

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

 <strong title="选择你最喜欢的水果.">你最喜欢的水果是?</strong>

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

 /* 结果如下  */
<strong title="选择你最喜欢的水果."><b>你最喜欢的水果是?</b></strong>

8、属性操作

  在jQuery中,用attr()方法来获取和设置元素属性,removeAttr()方法来删除元素属性。

 /*  获取<p>元素节点属性title  */
var p_txt = $("p").attr("title"); /* 设置属性值 */
$("p").attr("title,"your titlt");
$("p").attr({"name":"test","id":"id1"}); //名/值形式的对象设置属性 /* 删除属性 */
$("p").removeAttr("title");

9、样式操作

  9.1  获取样式和设置样式

 <p class="myClass">你最喜欢的水果是?</p>

 var p_class = $("p").attr("class");   //获取p元素的class
$("p").attr("class","hign"); //设置<p>元素的class为"high"

  

  9.2  追加样式

  jQuery提供一个专门的addClass()方法来追加样式,在原有的基础上添加class名。

  

  9.3  移除样式

 /*  移除一个class */
$("p").removeClass("high"); /* 移除多个class,用空格隔开 */
$("p").removeClass("class1 class2 classN"); /* 移除所有class */
$("p").removeClass();

  9.4  切换样式

 $("p").toggleClass("another");   //重复切换类名"another"

  9.5  判断是否含有某个样式

  hasClass()可以用来判断元素中是否含有某个class,如果有,则返回true,否则返回false.

 /* 也可以用来判断多个class,用空格隔开  */
$("p").hasClass("class1 class2 classN");

注意:is()是一种更强大的方法,可以做hasClass()不能做的事。

10、设置和获取HTML、文本和值

  10.1  html()方法:此方法类似于JavaScript的innerHTML属性,可以用来读取或设置元素中的HTML内容。

  

  10.2  text()方法:类似于JavaScript中的innerText属性,可以用来读取或者设置某个元素中的文本内容。

  

  10.3  val()方法:此方法类似于JavaScript中的value属性,可以用来设置和获取元素的值。无论是文本框、下拉框还是单选框,它都可以返回元素的值。如果元素是多选,则返回一个包含所有选择的值的数组。

11、遍历节点

  11.1  chidren()方法

  该方法用于取得匹配元素的子元素集合。只考虑子元素,不考虑后代元素!

  11.2  next()方法

  该方法用于去匹配元素后面紧邻的同辈元素。类似于层次选择器中的$("p + div").

  11.3  prev()方法

  该方法用于去匹配元素前面紧邻的同辈元素,与next()方法相反。

  

  11.4  sibling()方法

  该方法用于取得匹配元素前后所有的同辈元素。

  

  11.5  closest()方法

  该方法用于取得最近的匹配元素。首先检查当前元素是否匹配,如果不匹配则向上查找父级。什么都匹配不到返回空jQuery对象。

  11.6  parent()、parents()与closest()的区别

  这里不过多的赘述,大家可以点击链接到w3c亲自操作,印象更深。

12、CSS-DOM操作

  css()方法用来获取或设置元素的样式属性,用法同attr()。

  css()方法获取的高度值与样式的设置有关,可能会得到“auto”,也可能得到“10px”之类的字符串;而height()方法获取的高度值则是元素在页面的实际高度,与样式的设置无关,并且不带单位。

  12.1  offset()方法

  它的作用是获取元素在当前浏览器视窗文档的相对偏移,其中返回的对象包含俩个属性,即top和left,它只对可见元素有效。

 var offset = $("p").offset();  //获取<p>元素的offset()
var left = offset.left; //获取左偏移
var top = offset.top; //获取上偏移

  12.2  position()方法

  它的作用获取元素相对于最近一个position样式属性设置为relative或者absolute的祖父节点的相对偏移,与offset一样,即top和left.

 var position= $("p").position();  //获取<p>元素的position()
2 var left = position.left; //获取左偏移
3 var top = position.top; //获取上偏移

  12.3  scrollTop()方法和scrollLeft()方法

  这两个方法的作用分别是获取元素的滚动条距顶端的距离和距左侧的距离,即页面被卷走的部分高度或宽度。

  jQuery提供了大量的DOM操作API,我们可以随意所欲的运用,不用再担心所谓的浏览器兼容问题。熟练掌握之后,一定要去研究一下源码,重新认识原生JavaScript的强大,同时提高自身水平!

  下一期:jQuery中的事件

jQuery中的DOM操作——《锋利的JQuery》的更多相关文章

  1. jQuery中的DOM操作<思维导图>

    DOM是Document Object Model的缩写,意思是文档对象模型.DOM是一种与浏览器.平台.语言无关的接口.使用该接口可以轻松地访问页面中所有的标准组件.简单来说,DOM解决了Netsc ...

  2. jQuery中的选择器《思维导图》

    学习jQuery的课程中,我对jQuery中的选择器有了更深的认识,它的简洁写法,完美的兼容性,可靠的处理机制,都让我们省了很多事, 下面是我在学习过程中对jQuery选择器写的思维导图(全屏查看:& ...

  3. jQuery中的Ajax应用<思维导图>

    传统的WEB应用程序模型是这样工作的:当用户的界面操作触发HTTP请求,服务器在接到请求后进行一些业务逻辑处理,如保存数据等,然后向客户端返回一个html页面.但这种方式并没有给予用户很好的应用体验, ...

  4. jQuery中的DOM操作《思维导图》

    首先,是关于jQuery中的DOM操作的<思维导图>,请点击这里:jQuery中的DOM操作 列表框的左右选项移动 <html> <head> <title& ...

  5. 如何合理利用iMindMap中的模板创建思维导图

    思维导图的制作并不是一项简单的工作,尤其是对许多工作或学习有特殊要求的朋友而言,当我们需要应对不同场景制作不同的思维导图时,总不能都靠自己从头制作,这样难度比较大也比较耗时.而iMindMap(win ...

  6. dom core,html dom,css dom,jquery 中的dom操作

    前端开发中为达到某种目的,往往有很多方法:dom core,html dom,jquery; dom core/jquery主要通过函数调用的方式(getAttribute("属性名&quo ...

  7. Jquery:jquery中的DOM操作<一>

    之前两天学习了Jquery强大的选择器,今天学习了一部分Jquery对DOM的操作,下面我将把自己今天的成果分享给大家,那些菜鸟们,你们是否需要巩固之前所学? 首先需要知道,DOM操作分为3个方面:D ...

  8. jQuery中的DOM操作总结

    jQuery中的DOM操作 DOM是Document Object Medel的缩写,它的意思是文档对象模型,根据W3C的官方说法,DOM是一种跟浏览器,平台以及语言都没有关系的一种规范,也就是一种接 ...

  9. JavaWeb学习笔记——jquery中的dom操作

     jquery中的dom操作 废话不说:直接上例子: 1.添加节点-html页面 Append:向每个匹配的元素内部追加内容. <body> <ul id="city& ...

  10. 锋利的jQuery ——jQuery中的DOM操作(三)

    一.DOM的操作分类 1>DOM Core   2>HTML-DOM   3>CSS-DOM 二.jQuery中的DOM操作 DOM树 ①查找节点 1)查找元素节点 利用jQuery ...

随机推荐

  1. 「BZOJ 1924」「SDOI 2010」所驼门王的宝藏「Tarjan」

    题意 一个\(r\times c\)的棋盘,棋盘上有\(n\)个标记点,每个点有三种类型,类型\(1\)可以传送到本行任意标记点,类型\(2\)可以传送到本列任意标记点,类型\(3\)可以传送到周围八 ...

  2. 20165219第4次实验《Android程序设计》实验报告

    20165219第4次实验<Android程序设计>实验报告 一.实验内容及步骤 (一)Android Stuidio的安装Hello world测试 要求 参考http://www.cn ...

  3. bit、Byte、bps、Bps、pps、Gbps的单位的说明及换算

    一.bit与Byte区别 1. bit(比特) 是电脑记忆体的最小单元,在二进制计算机中,每一比特代表0或1的数位信号. 2. Byte(单位字节) 一般表示存储介质大小的单位,数字.字母和特殊符号占 ...

  4. php中的各种header整理

    <?php header('HTTP/1.1 200 OK'); // ok 正常访问 header('HTTP/1.1 404 Not Found'); //通知浏览器 页面不存在 heade ...

  5. 航天独角兽Spacex

    2018年2月7日下午3时45分,猎鹰重型火箭在位于卡纳维拉尔角的肯尼迪航天中心LC-39A平台顺利升空.火箭直升云霄,按照既定轨道持续升空,位于美国弗罗里达州卡纳维拉尔角的航天发射中心硝烟四起,非常 ...

  6. CBoard 看板参数管理

    看板设计采用简单Row+Column布局模式,每行总长度为12,每列对应一个图表,行高度可以调节,列高度集成行高 左边栏看板分类中,我的看板为当前用户创建的看板,普通看板分类通过分类管理维护,保存看板 ...

  7. 4A - Horse

    打表找规律 #include <iostream> #include <queue> using namespace std; ][]; ]{, , , , -, -, -, ...

  8. Python闭包需要注意的问题

    定义   python中的闭包从表现形式上定义为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure),也就是说内层函数引用了外层函数 ...

  9. day--41 mysql索引原理与慢查询优化

    mysql索引原理与慢查询优化一:什么是索引 01:索引的出现是为了提高查询数据的效率 02:索引在mysql叫做“键” 或则“key“(primary key,uniquekey ,还有一个inde ...

  10. 清华集训2017D2T1 小 Y 和地铁(metro)

    题目:https://www.luogu.org/problem/show?pid=P4005 题意:一条线段,给定n个点(n<=44)其中每个点可能对应另外一个点.如果一个点有对应点,那么就要 ...