在开始展开DOM操作前,首先需要构建一棵DOM树。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript" src="jquery-3.2.1.js"></script>
</head>
<body>
<p title="选择你最喜欢的水果">你最喜欢的水果是?</p>
<ul>
<li title='苹果'>苹果</li>
<li title='香蕉'><span>香蕉</span></li>
<li title='荔枝'>荔枝</li>
</ul>
</body>
</html>

接下来,对DOM的增删改查操作都将围绕这棵DOM树展开。

1、查找节点

1.1查找元素节点

$(function(){
var li = $("ul li:eq(1)");
console.log(li.text());
console.log(li.html());
})

在获取元素节点内容的时候,text()方法只对文本其作用,该方法获得节点包含内容时,会把html标签给删除,只保留文本内容html()方法对"文本"和"html"代码都起作用。

1.2查找属性节点

$(function(){
var p = $("p");
console.log(p.attr('title'));
})

attr()方法常用来获取元素的各种属性值,该方法可以接收一个或者两个参数,现在,当接收一个参数时,用来查询属性名为该参数的属性值,后面会继续展示接收两个参数的方法。

2、插入节点

在jQuery中,将新创建的节点插入到某个文档中的方法有很多,下面先来介绍一下各种方法的特点。

  • append():向每个匹配的元素内部追加内容(成为最后一个子节点)
  • appendTo():将所有匹配的元素追加到指定的元素中,实际上就是上面的append()相反操作
  • prepend():向每个匹配的元素内部前置内容(成为第一个子节点)
  • prependTo():将所有匹配的元素前置到指定的元素中,实际上就是上面的prepend()相反操作
  • after():在每个匹配的元素之后插入内容(成为紧邻的后一个兄弟节点)
  • insertAfter():将所有匹配的元素插入到指定元素的后面,实际上就是上面的after()相反操作
  • before():在每个匹配的元素之前插入内容(成为紧邻的前一个兄弟节点)
  • insertBefore():将所有匹配的元素插入到指定的元素的前面,实际上就是上面的before()相反操作

下面,依旧以上面的html为基础,逐一操作上面的方法。

append()

$(function(){
var li1 = $("<li></li>");
var li2 = $("<li title='樱桃'>樱桃</li>");
$("ul").append(li1);
   $("ul").append(li2);
})

appendTo()

$(function(){
var li1 = $("<li></li>");
var li2 = $("<li title='樱桃'>樱桃</li>");
li1.appendTo('ul');
li2.appendTo('ul');
})

该方法还可以用来移动元素,在进行移动时,先从文档上将该元素删除,然后在将该元素插入到删除后的文档中的指定节点处。

 $(function(){
var li1 =$('ul li:eq(1)');
li1.appendTo('ul');
})

prepend()

$(function(){
var li1 = $("<li></li>");
var li2 = $("<li title='樱桃'>樱桃</li>");
$('ul').prepend(li1);
$('ul').prepend(li2);
})

prependTo()

$(function(){
var li1 = $("<li></li>");
var li2 = $("<li title='樱桃'>樱桃</li>");
li1.prependTo('ul');
li2.prependTo('ul');
})

after()

$(function(){
var div1 = $("<div>水果</div>");
var div2 = $("<div>蔬菜</div>");
$('ul').after(div1);
$('ul').after(div2);
})

insertAfter()

$(function(){
var div1 = $("<div>水果</div>");
var div2 = $("<div>蔬菜</div>");
div1.insertAfter('ul');
div2.insertAfter('ul');
})

before()

$(function(){
var div1 = $("<div>水果</div>");
var div2 = $("<div>蔬菜</div>");
$('ul').before(div1);
$('ul').before(div2);
})

insertBefore()

$(function(){
var div1 = $("<div>水果</div>");
var div2 = $("<div>蔬菜</div>");
div1.insertBefore('ul');
div2.insertBefore('ul');
})

3、删除节点

jQuery中提供了三种删除节点的方法,分别为remove()、detach()和empty()。下面,依旧以最开始的html为基础依次展示这三种方法。

remove()

该方法能从DOM中删除所有匹配的元素,当某个节点使用该方法删除后,该节点所包含的所有后代节点将同时被删除,这个方法的返回值是一个指向已被删除的节点的引用,因此,可以在以后再使用这些元素。

$(function(){
$("ul li:eq(1)").remove();
})

$(function(){
$("ul li").remove("li[title='香蕉']");
})

$(function(){
var li1 = $("ul li:eq(1)").remove();
li1.appendTo("ul");
})

detach()

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

$(function(){
$("ul li").hover(function(){
alert($(this).html());
})
var li = $("ul li:eq(1)").detach();
li.appendTo("ul");
})

在上面的代码中,删除的li中绑定的hover事件被保存,再次使用这些元素的时候,hover事件依旧有效,但是,如果将上面的方法换成remove()方法,虽然匹配的元素依据存在,可以再次使用,但是它所绑定的事件和附加数据都不会保留,也就是说hover事件不会继续存在。

empty()

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

$(function(){
$("ul li:eq(1)").empty();
})

4、复制节点

在jQuery中,常用clone() 方法生成被选元素的副本,包含子节点、文本和属性。该参数接收一个可选参数,规定是否复制元素的所有事件处理。默认地,副本中不包含事件处理器。

$("ul li").click(function(){
  //$(this).clone().appendTo("ul");
  $("ul").append($(this).clone());
})

上面通过li的点击事件复制了li,并将其追加到ul中,但是,此时新追加的节点并不具备任何行为,想要新的节点也具有复制前的节点的行为,需要向clone()方法中添加参数。

$("ul li").click(function(){
$(this).clone(true).appendTo("ul");
})

该参数表明,复制元素的同时复制元素中所绑定的事件,也就是说,新添加的复制节点也具有点击事件。

5、替换节点

在jQuery中,替换节点有两种方法:replaceWidth()和replaceAll()。其中,replaceWidth()方法的作用是将所有匹配的元素都替换成指定的HTML或者DOM元素。replaceAll()方法与replaceWidth()方法的作用相同,只是颠倒了replaceWidth()操作。需要注意的是,不管采用哪种方法,如果在替换前已经为元素绑定了事件,替换后原来绑定的事件将会与被替换的元素一起消失,需要在新元素上重新绑定事件。

$(function(){
  $("p").replaceWith("<h1>你最不喜欢的水果是?</h1>");
  $("<li title='菠萝'>菠萝</li>").replaceAll("ul li[title='苹果']");
})

6、包裹节点

如果要将某个节点用其他标记包裹起来,jQuery提供了三种方法,现在,依次演示这三种方法。

wrap()

该方法对于需要在文档中插入额外的结构化标记非常有用,而且它不会破坏原始文档的语义。

$(function(){
$("span").wrap("<strong style='color:red;'></strong>")
})

  

wrapAll()

该方法会将所有匹配的元素用一个元素来包裹,而wrap()方法则是将所有的元素进行单独的包裹。

为了演示两者的区别,先对原来的html进行调整。

<ul>
<li title='苹果'>苹果</li>
<li title='香蕉'><span>香蕉</span></li>
<li title='菠萝'><span>菠萝</span></li>
<li title='荔枝'>荔枝</li>
</ul>

首先使用wrap()方法将所有的元素进行单独的包裹,此时,每一个匹配的元素都分别进行了包裹。

 $(function(){
$("span").wrap("<strong style='color:red;'></strong>")
})

  

再使用wrapAll()将所有匹配的元素用一个元素来包裹,此时,两个匹配的元素被同时包裹到了一个<strong>元素中,而li这种处于被包裹的多个元素间的其他元素,被放到了包裹元素之后。

 $(function(){
$("span").wrapAll("<strong style='color:red;'></strong>")
})

 

wrapInner()

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

$(function(){
$("span").wrapInner("<strong style='color:red;'></strong>")
})

与前面两个方法不同的是,这个方法中,包裹的是匹配元素的子元素,而不是匹配的元素,也就是上面所示,<strong>在<span>里面。

DOM节点的增删改查的更多相关文章

  1. HTML DOM节点的增删改查

    上篇博客中,我们已经初步接触了DOM基础,可是我们学习是为了可以更好地应用,今天我们就来看看DOM节点的增删改查. 无论在哪里,我们想要操作一个东西,总是应该先去获得它.那么我们怎么获得呢? HTML ...

  2. DOM节点的增删改查以及class属性的操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. JS DOM节点的增删改查

    合并拆分 行内样式  script写在html里面

  4. HTML DOM(二):节点的增删改查

    上一篇讲述了DOM的基本知识,从其得知,在DOM眼中,HTML的每个成分都可以看作是节点(文档节点.元素节点.文本节点.属性节点.注释节点,其中,属性节点是属于元素节点),本篇的内容就是通过DOM对这 ...

  5. 9 HTML DOM事件监听&版本兼容&元素(节点)增删改查

    事件监听: 语法:element.addEventListener(event, function, useCapture); event:事件的类型,触发什么事件,注意不需要on作为前缀,比如cli ...

  6. JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件

    JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...

  7. ZooKeeper客户端 zkCli.sh 节点的增删改查

    zkCli.sh 在 bin 目录下的  zkCli.sh  就是ZooKeeper客户端 ./zkCli.sh -timeout 5000  -server 127.0.0.1:2181  客户端与 ...

  8. Zookeeper入门(六)之zkCli.sh对节点的增删改查

    参考地址为:https://www.cnblogs.com/sherrykid/p/5813148.html 1.连接 在 bin 目录下的  zkCli.sh  就是ZooKeeper客户端 ./z ...

  9. 超详细的DOM操作(增删改查)

    操作DOM的核心就是增删改查 原文地址:https://jianshu.com/p/b0aa846f4dcc 目录 一.节点创建型API 1.1 createElement 1.2 createTex ...

随机推荐

  1. 51nod1837

    题解: 数论,经过一些大佬的证明,只有1和2这两种可能性 然后再分开来判断即可 注意1的时候为0 代码: #include<bits/stdc++.h> using namespace s ...

  2. Jena RDF API

    1.  jena 简单使用 RDF可以用简单的图示:包括节点以及连接节点的带有箭头的线段来理解. 这个例子中,资源 http://.../JohnSmith 表示一个人.这个人的全名是 John Sm ...

  3. 超炫jQuery测试答题功能

    推荐一款超炫jQuery测试答题功能插件 实例代码 <body> <div class="container" id="main"> & ...

  4. secureCRT 字体颜色、文件夹和文件显示的颜色

    secureCRT菜单栏中选择会话选项 修改显示文件夹和文件显示的颜色 修改字体样式 查看效果

  5. Nexus私服的安装与配置

    Nexus的安装与配置 仅以此文,献给陷入懒癌晚期的小伙伴们. 本文基于nexus 3.xx .0. What?Why?When?Who?Where? Sonatype Nexus是一款maven仓库 ...

  6. C语言与VT100控制码编程

    C语言与VT100控制码编程 声明: . 如果您打算阅读本文,希望您已经了解过C语言的基本语法,本文不对C语言的基本语法进行说明,因为那些东西几乎唾手可得; . 本文在vim中编辑,请尽量是用vim进 ...

  7. ubuntu16.04-caffe安装过程详解-草稿

    前言 目前主要模块都是基于深度学习展开的,虽然知道一些深度学习的基础知识,只是皮毛,还没有使用深度学习框架练手甚至深入,故开始着手深度学习的实操和深入学习. 操作步骤 参考 1.Ubuntu16.04 ...

  8. 批量分割视频opencv

    前言 视频处理过程中,会用到对等长的视频进行处理,此时要对大视频进行分割. 实现步骤 1.批量读取视频集: 2.视频分割: 测试代码 1.批量读取视频集: /********************* ...

  9. 利用asynchttpclient开源项目来把数据提交给服务器

    可以通过github去查找asynchttpclient,并下载源代码,并加载到自己的工程中. 1.利用get方法提交 2.利用post方法来提交

  10. IDEA错误:Cannot start compilation: the output path is not specified for module "XXX".

    错误是发生在从github上checkout自己的项目时.因为没有将配置文件一起上传,所以在运行java程序时有了这个报错: Cannot start compilation: the output ...