Jquery基础之DOM操作

Dom是Document Object Model的缩写,意思是文档对象模型。DOM是一种与浏览器、平台、语言无关的接口,使用该接口可以轻松访问页面中所有的标准组件。DOM操作可以分为三个方面即DOM Core(核心)、HTM-DOM和CSS-DOM。

JQuery中的DOM操作主要对包括:建【新建】、增【添加】、删【删除】、改【修改】、查【查找】【像数据库操作】。下面的DOM操作将围绕上面的DOM树进行学习JQueryDOM操作。

        一、查--查找DOM节点

    查找节点非常容易,使用选择器就能轻松完成各种查找工作。例:查找元素节点p返回p内的文本内容$("p").text();例:查找元素节点p的属性返回属性名称对应的属性值$("p").attr("title"),返回p的属性title的值。

  二、建--新建DOM节点

    1、创建元素节点

      创建元素节点并且把节点作为<ul>元素的子节点添加到DOM节点树上。先创建元素点,创建元素节点使用Jquery的工厂函数$()来完成,格式如下:$(html),该方法会根据传入的html字符串返回一个DOM对象,并将DOM对象包装成一个JQuery对象后返回。创建一个元素节点JQuery代码如下:

      $li1=$("<li></li>")

      代码返回$li1就是一个由DOM对象包装成的JQuery对象。把新建节点添加到DOM树中JQuery代码如下:

      $("ul").append($li1); 

      添加后页面中只能看到<li>元素默认的"·",由于没有为节点添加文本所以只显示默认符号,下面创建文本节点。

      PS:append()方法是添加DOM节点方法详见增--添加DOM节点。 

    2、创建文本节点

      使用JQuery的工厂函数$()同样能够创建文本节点,创建文本节点的JQuery代码如下:

      $li2=$("<li>苹果</li>");

      代码返回$li2就是一个由DOM对象包装成JQuery对象,把新建的文本节点添加到DOM树中JQuery代码如下:

      $("ul").append($li2);

      添加后页面中能看到"·苹果",右键查看页面源码发现新加的文本节点没有title属性。下面方法创建带属性的节点。

    3、创建属性节点

      创建属性节点同元素节点、文本节点一样使用JQuery的工厂函数完成。创建属性节点的JQuery代码如下:

      $li3=$("<li title='榴莲'>榴莲</li>");       

       代码返回$li3也是一个由DOM对象包装成JQuery对象,把新建的属性节点添加到DOM树中JQuery代码如下:

      $("ul").append($li3);

      添加后页面中能看到"·榴莲",右键查看页面源码发现新加的属性节点有title='榴莲'属性。

   三、增--添加DOM节点

      动态新建元素不添加到文档中没有实际意义,将新建的节点插入到文档中有多个方法,如下:append()、appendTo()、prepend()、prependTo()、after()、insertAfter()、before()、insertBefore()。

    1、append()方法

      append()方法向匹配的元素内部追加内容, 方法如下:$("target").append(element);例:

      $("ul").append("<li title='香蕉'>香蕉</li>");

      该方法查找ul元素,然后向ul中添加新建的li元素。

    2、appendTo()方法

      appendTo()方法将所有匹配的元素追加到指定的元素中,该方法是append()方法的颠倒[操作主题的颠倒并非操作结果]操作。方法如下:$(element).appendTo(target);例:

       $("<li title='荔枝'>荔枝<li>").appendTo("ul");

      该方法新建元素li,然后把li添加到查找到的ul元素中。

    3、prepend()方法

      prepend()方法将每匹配的元素内部前置要添加的元素,方法如下:$(target).prepend(element);例:

      $("ul").prepend("<li title='芒果'>芒果</li>")

      该方法将查找元素ul然后将新建的li元素作为ul子节点,且作为ul的第一个子节点插入到ul中。

    4、prependTo()方法

      prependTo()方法将元素添加到每一个匹配的元素内部前置,方法如下:$(element).prependTo();例:

      $("<li title='西瓜’>西瓜</li>").prependTo("ul");

      该方法将新建的元素li插入到查找到的ul元素中作为ul的第一个子节元素。

    5、after()方法

      after()方法向匹配的元素后面添加元素,新添加的元素做为目标元素后的紧邻的兄弟元素。方法如下:$(target).after(element);例:

      $("p").after("<span>新加段新加段新加段新加段新加段</span>");

      方法将查找节点p,然后把新建的元素添加到span节点后面做为p的兄弟节点。

    6、insertAfter()方法

      insertAfter()方法将新建的元素插入到查找到的目标元素后,做为目标元素的兄弟节点。方法如下:$(element).insertAfter(target);例:

      $("<p>insertAfter操作</p>").insertAfter("span");

      方法将新建的p元素添加到查找到目标元素span后面,做为目标元素后面的第一个兄弟节点。

    7、before()方法

      before()方法在每一个匹配的元素之前插入,做为匹配元素的前一个兄弟节点。方法如下:$(target).before(element);例:

      $("p").before("<span>下面是个段落</span>");

      before方法查找每个元素p,将新建的span元素插入到元素p之前做为p的前一个兄弟节点。

    8、insertBefore()方法

      insertBefore()方法将新建元素添加到目标元素前,做为目标元素的前一个兄弟节点,方法如下:$(element).insertBefore(target);例:

      $("<a href='#'>锚</a>").insertBefore("ul");

      insertBefore()新建a元素,将新建的a元素添加到元素ul前,做为ul的前一个兄弟节点。

      增加元素的方法前四个是添加到元素内部,后四个是添加到元素外部的操作,有这些方法可以完成任何形式的元素添加。

    四、删--删除DOM节点操作

      如果想要删除文档中的某个元素JQuery提供了两种删除节点的方法:remove()和empty();

    1、remove()方法

      remove()方法删除所有匹配的元素,传入的参数用于筛选元素,该方法能删除元素中的所有子节点,当匹配的节点及后代被删除后,该方法返回值是指向被删除节点的引用,因此可以使用该引用,再使用这些被删除的元素。方法如下:$(element).remove();例:

      $span=$("span").remove();

      $span.insertAfter("ul");

      该示例中先删除所有的span元素,把删除后的元素使用$span接收,把删除后的元素添加到ul后面做为ul的兄弟节点。该操作相当于将所有的span元素以及后代元素移到ul后面。

    2、empty()方法。

      empty()方法严格来讲并不是删除元素,该方法只是清空节点,它能清空元素中的所有子节点。方法如下:$(element).empty();例:

      $("ul li:eq(0)").empty();

      该示例使用empty方法清空ul中第一个li的文本值。只能下li标签默认符号”·“。

  五、改--修改DOM节点操作

       修改文档中的元素节点可以使用多种方法:复制节点、替换节点、包裹节点。

    1、复制节点$(element).clone()

       复制节点方法能够复制节点元素,并且能够根据参数决定是否复制节点元素的行为。方法如下:$(element).clone(true);例:

        $("ul li:eq(0)").clone(true);

       该方法复制ul的第一个li元素,true参数决定复制元素时也复制元素行为,当不复制行为时没有参数。

    2、替换节点$(element).repalcewith()、$(element).repalceAll()

       替换节点方法能够替换某个节点,有两种形式形式实现:replaceWith()和replaceAll().使用replaceWith方法使用后面的元素替换前面的元素,replaceAll方法使用前面的元素替换后面的元素,方法如下:$(oldelement).replaceWith(newelement);$(newelement).repalceAll(oldelement);例:             $("p").replaceWith("<strong>我要留下</strong>");该方法使用strong元素替换p元素。

        $("<h3>替换strong</h3>").repalceAll("strong");该例使用h3元素替换所有的strong元素。

    3、包裹节点$(element).wrap()、$(element).wrapAll()、$(element).wrapInner()

       包裹节点方法使用其他标记包裹目标元素从而改变元素的显示形式等,并且该操作不会破坏原始文档的词义。包裹节点有三种实现形式:wrap();wrapAll();wrapInner();

       wrap()方法如下:$(dstelement).wrap(tag);例:

        $("p").wrap("<b></b>");该示例方法使用b标签包裹所有的p元素每个元素都使用b标签包裹。

       wrapAll()方法如下:$(dstelement).wrapAll(tag);例:

        $("p").wrapAll("<b></b>");访示例方法使用b标签包裹所有的p元素,所有的p元素标签用一个b标签包裹。

        wrapInner()方法如下:$(dstelement).wrapInner(tag);例:

        $("strong").wrapInner("<b></b>");该示例使用b标签包裹每个一strong元素的子元素。

    Dom元素的其他操作:属性操作、样式操作、设置和获取HTML,文本和值、遍历节点操作、Css-Dom操作。

    1、属性操作attr()和removeAttr()

      attr()方法能够获取元素属性,也能能够设置元素属性。方法如下,当attr(para1)方法有个参数时候用于获得当前元素的para1的属性值,当attr(para1,attrValue)有两个参数时候设置当前元素的属性名为para1的属性值为attrValue;例:

       $("p").attr("title");该示例用于获得p元素的title属性值。

       $("p").attr("title","你最喜欢的水果");该示例设置p元素的title属性值为"你最喜欢的水果";

      如果一次设置多个属性值可以使用“名/值”对形式,例:

       $("p").attr({"title":"你最喜欢的水果","name":"水果"})。该示例一次设置两个属性值。

      removeAttr()方法用于删除特定的属性,方法是在参数中指定属性名。例:

      $("p").removeAttr("name");该方法就是移除p元素的name属性。

     2、样式操作addClass()、removeClass()、toggleClass()和hasClass()

      添加样式addClass()方法,使用该方法对目标元素添加相应的样式,方法如下:$(element).addClass();例:

       $("p").addClass("ul");该示例设置元素p的样式为ul。

      移除样式removeClass()方法,使用该方法移除目标元素的指定样式,方法如下:$(element).removeClass();例:

       $("p").removeClass("ul");该救命去除掉p元素的ul类样式。

      切换样式toggleClass()方法,使用该方法切换目标元素的样式,方法如下:$(element).toggleClass();例:

      $("p").toggleClass("ul");该方法来回切换【添加删除实现切换】元素p的样式ul.

      判断元素是否使用了样式$(element).hasClass(),方法如下:$(element).hasClass(class);例:

      alert($("p").hasClass("ul"));打印出p元素是否有ul样式。

      PS:addClass()和attr()方法设置样式的不同,attr方法把元素的属性名对应的属性值设为方法中的参数值,addClass()则把属性值

添加到属性名对应的属性值中。例:已有元素<p class='class1'>元素样式</p>,使用attr()和addClass()分别添加新样式。

      $("p").attr("class","another").结果是<p class='another'>元素样式</>

      $("p").addClass("class","another")结果是<p class='class1 another'>元素样式</p>

    3、设置和获取HTML【html()】,文本【text()】和值【val()】

      html()方法获得或设置某个元素的html元素。方法如下:$(selector).html();例:

       $("p").html();该示例获得元素p的html内容。

      $("p").html("<strong>添加html内容</strong>");该示例设置p的html内容为”<strong>添加html内容</strong>“;

      PS:该方法可以用于XHTML文档,不能用于XML文档。

      text()方法获得或设置某个元素的文本值。方法如下:$(selecotr).text();例:

      $("p").text();该示例获得元素p的text文本内容。

      $("p").text("重新设置的文本内容");该示例设置元素p的text文本为"重新设置的文本内容";

      PS:该方法对html和XML文档都适用。

      val()方法获得或设置某个元素的值,如果元素值是多选则以数组形式返回,方法如下:$(selector).val();例:文本元素 

<input type="text" id="userName" value="请输入用户名" />

      $("#userName").val();获得input元素的值。

      $("#userName").val('响马');设置input元素的值为'响马'。

      val()方法的不仅能操作input,最重要的一个用途用于select【下拉列表框】、checkbox【多选框】、radio【单选框】。例:在下拉框下的多选赋值应用<select id="fruits" multiple="multiple"><option>苹果</option><option>香蕉</option><option>西瓜</option></select>

      $("#fruits").val(['苹果','香蕉']);该示例使select中苹果和香蕉两项被选中。

      4、遍历节点操作children()、next()、prev()、siblings()和closest()

      children()方法用于取得匹配元素的子元素集合,只匹配子元素不考虑任何后代元素。方法如下:$(selector).children();例:

       $("$("body").children().length;该示例获得body元素的子元素个数;

      next()方法用于匹配元素的下一个兄弟节点,方法如下:$(selector).next();例:

       $("p").next().html();该示例获得p元素的下一个兄弟节点的html内容。

      prev()方法用于匹配元素的上一个兄弟节点,方法如下:$(selector).prev();例:

       $("ul").prev().text();该示例获得ul元素的上一个兄弟节点的文本内容。

      siblings方法()用于匹配目标元素的所有兄弟元素,方法如下:$(selector).siblings();例:

       $("p").slibings();示例获得p元素的所有兄弟节点元素。

      closest()方法()用来取得最近的匹配元素,首先检查当前元素是否匹配如果匹配则直接返回,否则继续向上查找父元素中符合条件的元素返回,如果没有匹配的元素则返回空JQuery对象。

    5、CSS-Dom操作css()、offset()、position()、scrollTop()和scrollLeft()

      css()方法用于获取、设置元素的一个或多个属性。方法如下:$(selector).css();例:

       $("p").css("color","red");该示例用于设置元素的颜色属性为红色;

         $("p").css("color")该示例用于获得元素的color样式值;

       $("p").css({"font-size":"30px","backgroundColor","#888888"});该示例用于设置元素的多个样式。

      offset()方法用于获取元素相对当前窗体的偏移量,其返回对象包括两个属性:top和left。方法如下:$(selector).offset()

       var offset= $("p").offset(); var left=offset.left;var top=offset.top;该示例用于获得元素p的偏移量。

      PS:offset()只对可见元素有效。

      position()方法用于获取元素于最近的个position样式属性设置为relative或者absolute的祖交节点的相对偏移量。方法如下:$(selector).position();例:

       var postion = $("p").positon();var left=positon.left;var top=positon.top;该示例用于获得元素p的位置。

      scrollTop()和scrollLeft()方法用于获取元素的滚动条距顶端的距离和距左侧的距离。方法如下:$(selector).scrollTop();$(selector).scrollLeft();例:

       var scrollTop=$("p").scrollTop();var scrollLeft=$("p").scrollLeft();该示例用于获得元素的滚动条的位置。

      也可以添加参数将元素滚动到指定的位置。例:

       $("textarea").scrollTop(300);$("textarea").scrollLeft(300);


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 下 `dirname $0` shell 获取当前正在执行脚本的绝对路径

【】&#xff0c;学名叫“倒引号”&#xff0c; 如果被“倒引号”括起来&#xff0c; 表示里面需要执行的是命令。比如 dirname $0&#xff0c; 就表示需要执行 dirname $0 这个命令【“”】 &#xff0c; 被双引号括起来的内容&#xff0c; 里面 出现 $ (美元号&#xf…

具有angularjs资源的Spring Rest Controller

Angularjs ngResource是用于与基于REST的服务进行交互的angularjs模块。 我最近在Spring MVC的一个小型项目中使用了它&#xff0c;并希望记录一个对我来说很好的配置。 该控制器在工厂中运行&#xff0c;它支持在酒店实体上进行CRUD操作&#xff0c;并支持以下方法&#xff1…

PAT乙级1023

题目链接 https://pintia.cn/problem-sets/994805260223102976/problems/994805298269634560 题解 主要就是控制首位不能为0&#xff0c;其他的都很简单&#xff0c;就遍历然后往尾部加数字就好了。 // PAT BasicLevel 1023 // https://pintia.cn/problem-sets/994805260223102…

js中var、let、const区别

//1.var定义的变量可以修改&#xff0c;如果不初始化会输出undefined&#xff0c;不会报错。 var a; console.log(a); //undefined//2.let是块级作用域&#xff0c;函数内部使用let定义后&#xff0c;对函数外部无影响。 let c 3; console.log(c)function change(){ let c 6;…

2000错误信息:MMC创建无法管理单元。

系统Vista&#xff0c;安装了SQL Server 2000 SP4&#xff0c;然后安装了Microsoft SQL Server 2005。后因系统太慢&#xff0c;卸载SQL SERVER2005,结果在打开 SQLServer2000的 企业管理器&#xff0c;收到以下错误信息&#xff1a;MMC创建无法管理单元。到网上寻找了以后&…

A股滚动净利润增速最高排名

最近2年&#xff08;共8个季度&#xff09;的滚动净利润都在增长&#xff0c;且平均增速超过10%。 计算举例&#xff1a;滚动净利润增速 ((2018Q1 到 2018Q4的净利润之和) / (2017Q4 到 2018Q3的净利润之和) -1) * 100%。 预测下季度&#xff1a;依据以往的增速&#xff0c;进…

Java 8 Friday:让我们弃用那些旧版库

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五&#xff0c;我们都会向您展示一些不错的教程风格的Java 8新功能&#…

Navicat for MySQL v8.0.27 的注册码

Navicat for MySQL v8.0.27 的注册码 Navicat是一个强大的MySQL数据库管理和开发工具。Navicat为专业开发者提供了一套强大的足够尖端的工具&#xff0c;但它对于新用户仍然是易于学习。Navicat,使用了极好的图形用户界面&#xff08;GUI&#xff09;&#xff0c;可以让你用一种…

Educational Codeforces Round 10

652A - Gabriel and Caterpillar 20171128 按题意模拟即可 #include<stdlib.h> #include<stdio.h> #include<math.h> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int h1,h2,a,b,ans1; int main()…

内存不足:杀死进程或牺牲孩子

现在是早上6点。 我清醒地总结了导致我太早醒来的电话的事件序列。 这些故事开始时&#xff0c;我的电话警报响了。 困倦而脾气暴躁的我检查了电话&#xff0c;看我是否真的疯了以至于无法在凌晨5点设置唤醒警报。 不&#xff0c;这是我们的监视系统&#xff0c;表明Plumbr服务…

前端优化

加快网站的最佳实践 最小化HTTP请求 终端用户响应时间的80&#xff05;用于前端。大部分时间都在下载页面中的所有组件&#xff1a;图像&#xff0c;样式表&#xff0c;脚本&#xff0c;Flash等。减少组件数量又会减少呈现页面所需的HTTP请求数量。这是更快页面的关键。 组合…

将Array、Dictionary等集合类的序列化和反序列化

Objective-C的集合类序列化到文件中或者从文件中反序列化其实很简单&#xff0c;请看下面的示例代码&#xff1a; NSArray *array [NSArray arrayWithObjects:"Hefeweizen", "IPA", "Pilsner", "Stout", nil];NSDictionary *dictiona…

职场交流:一位软件工程师的7年总结

2009年05月13日15:06  来源&#xff1a;1、分享第一条经验&#xff1a;“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友 对这个道理有些体会吧。但我相信这一点也很重要&#xff1a;“重要的道理…

使用自定义断言丰富测试代码

受GeeCON会议期间tkaczanowski演讲的启发&#xff0c;我决定仔细研究AssertJ库的自定义断言。 在我的“骰子”游戏中&#xff0c;我创建了一个“机会”&#xff0c;它是骰子的任意组合&#xff0c;其分数是所有骰子的总和。 这是相对简单的对象&#xff1a; class Chance imp…

js判断数据类型

在js中如果想判断某种数据的数据类型&#xff0c;一般使用typeof方法 var str "string";var num 1;var bool true;var u;var n null;var nan NaN;var obj new Object();var fn function () {};console.log(typeof str); //stringconsole.log(typeof num); //n…

Elasticsearch 索引别名的使用

几种常用方式&#xff1a; 1.定时更新别名指向&#xff0c;更新后原索引可删除或保留 POST /_aliases {"actions": [{"add": {"alias": "logs_current","index": "logs_2018-10"}},{"remove": {"a…

Python的win32serviceutil之疑似BUG

郑昀玩聚SR 20090515 1、现象&#xff1a; 用Python的win32serviceutil控制Windows Service启动、停止、重启时&#xff0c;如下代码一般是没问题的。 import win32serviceutil def service_manager(action, machine, service): if action stop: win32serviceutil…

JavaFX 8u20天的未来过去(始终在最前面)

自从我发布有关JavaFX的主题以来已经有很长时间了。 因此&#xff0c;如果您仍在追随&#xff0c;那就太棒了&#xff01; 介绍 在这篇博客文章中&#xff0c;我想写一篇关于从JavaFX 8 update 20开始的非常酷的功能的博客&#xff0c;该功能使您的应用程序始终位于其他应用程…

cocos creator实战-(三)简单例子摇杆控制角色移动

&#xff08;待完善&#xff0c;给玩家加上摄像机跟随效果&#xff09; 1、stick监听cc.Node.EventType.TOUCH_MOVE事件&#xff0c;获取tick移动的坐标和朝向&#xff0c;限制移动的范围 2、根据stick的朝向&#xff0c;每帧更新player的位置和方向 // 摇杆代码 joy_stick.jsc…

统计数组中重复元素个数

/*** 循环统计数组或集合中的重复元素个数* param args*/public static void main(String[] args) {Map<String, Integer> map new HashMap<String, Integer>();String[] ss {"白","黑","绿","白"};for (int i 0; i &l…