锋利的jQuery——第三章、jQuery中的DOM操作

 

目录

3.1 DOM操作的分类

1. DOM core

2. HTML-DOM

3. CSS-DOM

3.2 jQuery中的DOM操作

3.2.1 查找节点

3.2.2 创建节点

3.2.3 插入节点

3.2.4 删除节点

1. remove()方法

2. detach()方法

3. empty()方法

3.2.5 复制节点

3.2.6 替换节点

3.2.7包裹节点

1.wrapAll()

2. wrapInner()

3.2.8 属性操作

1. 获取属性和设置属性

2. 删除属性

3.2.9 样式操作

1. 获取样式和设置样式

2. 追加样式

3. 移除样式

4. 切换样式

5. 判断是否含有某个样式

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

1. html()方法

2. text()方法

3. val()方法

3.2.11 遍历节点

3.2.12 CSS-DOM操作



3.1 DOM操作的分类

一般来说,DOM操作分3个方面,即DOM core(核心)、HTML-DOM和CSS-DOM。

1. DOM core

DOM core不专属于js,任何一种支持DOM的程序设计语言都可以使用它。可以用来处理任何一种使用标记语言编写出来的文档。js中的getElementById()、getElementsByTagName()、getAttribute()和setAttribute()等方法都属于DOM Core方法。

2. HTML-DOM

3. CSS-DOM

CSS-DOM是针对CSS的操作。js中,CSS-DOM主要是获取和设置style对象的各种属性,通过改变style属性来设置样式。

3.2 jQuery中的DOM操作

3.2.1 查找节点

查找节点可以使用第二章介绍的jQuery选择器来完成。例子如下:

//查找元素节点
var li = $("ul li:eq(1)");    //选取ul中的第二个li
alert(li.text());            //输出li中的文本




//查找属性节点
var p = $("p");               //获取所有p节点
var p2 = p.attr("title");    //使用attr()方法获取title属性的值

3.2.2 创建节点

在DOM操作中,常常需要动态创建HTML内容,使得页面发生改变,并且达到人机交互的目的。

1.创建元素节点

var $li = $("<li></li>");    //$(html)方法创建一个DOM对象,并将其包装成jQuery对象后返回

$("ul").append($li);        //append()方法将新建的li添加到已有的ul中


2.创建文本节点

var $li = $("<li>文本文本</li>");    //创建元素时可以将文本同时给出

3.创建属性节点

var $li = $("<li title = 'bbb'></li>");    //同创建文本节点一样

3.2.3 插入节点

新创建的节点插入已有文档的方法并非只有一种,jQuery中还有以下几种插入节点的方法:

插入节点的方法
方法描述示例
append()向匹配的元素内部添加内容

HTML代码:

<p>我想说:</p>

jQuery代码:

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

结果:

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

appendTo()将所匹配的元素添加到指定元素中。实际上是颠倒了常规的append()方法。

HTML代码:

<p>我想说:</p>

jQuery代码:

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

结果:

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

prepend()向每个匹配的元素内部前置内容

HTML代码:

<p>我想说:</p>

jQuery代码:

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

结果:

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

prependTo()将所匹配的元素前置到指定元素中。实际上是颠倒了常规的prepend()方法。

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()将所有匹配的元素插入到指定元素之后。实际上是颠倒了常规的after()方法。

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()将所有匹配的元素插入到指定的元素前面。实际上是颠倒了常规的before()方法

HTML代码:

<p>我想说:</p>

jQuery代码:

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

结果:

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

 

插入方法不只是可以用来插入元素,还可以用来调整原先元素的顺序,例如:

var li_1 = $("ul li:eq(1)");        //获取ul中的第二个li
var li_2 = $("ul li:eq(2)");        //获取ul中的第三个li
li_2.insertBefore(li_1);            //将两个li的顺序对调

 

3.2.4 删除节点

jQuery提供了三种方法可以对元素进行删除。即remove(),detach()和empty()。

1. remove()方法

从DOM中删除所有匹配的元素,并且返回选中的元素。当某个节点用此方法删除后,该节点所包含的后代节点将同时被删除。

var li = $("ul li:eq(1)").remove();

var li_2 = $("ul li").remove("li[title!=菠萝]");

2. detach()方法

和remove()方法一样,删除匹配的元素。但是这个方法不会讲匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素。与remove()方法不同的是所有的绑定事件和附加数据等都会保留。

var $li = $("ul li:eq(1)").detach();

3. empty()方法

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

$("ul li:eq(1)").empty();        //清空此元素里的内容,注意是元素里面的内容,元素还在。

3.2.5 复制节点

使用方法clone(),此方法有一个参数true,传入时可以复制节点的同时也复制节点所绑定的事件。

$(this).clone(true);

3.2.6 替换节点

如果要替换节点,jQuery提供了两种方法,即replaceWith()和replaceAll()。replaceAll()与之前的insertBefore一样,是replaceWith的颠倒。替换之后原先绑定的事件将会与被替换的元素一样消失,需要在新元素上重新绑定。

$("p").replaceWith("li");

$("li").replaceAll("p");

3.2.7包裹节点

使用wrap()方法可以将原节点包裹而不改变原始文档的语义。此外还有wrapAll()和wrapInner()。

$("p").warp("<b></b>");
<b><p>哈哈哈</p></b>    //包裹后的结果

1.wrapAll()

将匹配到的所有元素一同包裹起来,如果被包裹的元素中间有其他元素,其他元素会被放到包裹元素的后面。wrap()是将元素单独包裹。

2. wrapInner()

将每一个匹配到的元素的内容包括文本节点包裹起来。示例如下:

<strong>哈哈哈哈</strong>                //包裹前

<strong><b>哈哈哈哈</b></strong>         //包裹后

3.2.8 属性操作

1. 获取属性和设置属性

获取属性和设置属性都是使用attr()方法,不同的是参数的个数。

获取属性只需要传递一个参数,即是要获取的属性名字;而设置参数则需要传递两个参数(属性名,属性值)。

$(this).attr("title");                    //获取元素的title属性值
$(this).attr("title","mytitle");          //设置元素的属性值

//设置属性值可以使用json
var json = { "title" : "mytitle","name" : "test"};
$(this).attr(json);

PS:jQuery中很多方法都是可以实现获取和设置的,如attr()、html()、text()、css()、height()、width()、val()等方法。

2. 删除属性

删除属性可以使用removeAttr()方法,参数即为要删除的属性名。

$(this).removeAttr("title");

3.2.9 样式操作

1. 获取样式和设置样式

使用attr()方法传入class属性可以设置样式或者获取样式,此处不赘述。

2. 追加样式

jQuery中提供了addClass()方法来追加样式。

$("p").addClass("another");        //给p添加新的class但不会覆盖原先的

3. 移除样式

使用removeClass()移除指定的或者全部的class。区别还是在于参数,如果需要指定删除的class就需要传入要删除的class,若参数为空则是删除所有的class。

$("p").removeClass("another");

4. 切换样式

使用toggle()方法可以对某个样式进行添加/去除操作,达到了切换的目的。也就是交替使用addClass和removeClass方法。

5. 判断是否含有某个样式

使用hasClass方法判断,存在则返回true,否则返回false。

$("p").hasClass("another");

//实际上相当于
$("p").is(".another");

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

1. html()方法

此方法类似于js中的innerHTML属性,可以用来读取和设置某个元素的HTML内容。此方法可以用于XHTML文档,但不能用于XML文档。

//获取元素的HTML内容
var text = $("p").html();

//设置元素的HTML内容
$("p").html("<b>哈哈哈</b>");

2. text()方法

此方法类似于js中的innerText属性,可以用来读取和设置某个元素的文本内容。但是innerText在火狐浏览器不适用,党适用于XHTML和XML文档。使用方法同html(),不赘述。

3. val()方法

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

3.2.11 遍历节点

方法描述返回示例
children()此方法用于取得匹配元素的子元素集合,仅仅考虑子元素而不考虑其他后代元素。集合元素$("ul").chlidren()获取<ul>的子元素集合。
next()用于取得匹配元素后面紧邻的同辈元素。集合元素$("ul").next()获取每个<ul>的下一个同辈元素。
prev()用于取得匹配元素前面紧邻的同辈元素。集合元素$("ul").prev()获取每个<ul>的前一个同辈元素。
sibling()同于匹配元素前后所有的同辈元素。集合元素$("ul").sibling()获取每个<ul>的所有同辈元素。
closest()用于获得最近的匹配元素。从本身开始向上查找。单个元素$("ul").closest("li").css("color","red");给匹配到的<li>设置颜色。

3.2.12 CSS-DOM操作

直接用css()方法读取和设置style。

$("p").css("color" , "red");
$("p").css({"color" : "red","fontSize" : "16px"});
关于元素定位的几个常用方法
方法描述示例
offset()对可见元素有效,获取元素相对当前视窗的偏移量,返回对象包含两个属性top和left$("p").offset().left、$("p").offset().top
position()获取元素相对最近的一个position样式为relative或者absolute的祖父节点的相对偏移,同上,返回对象有两个属性。$("p").position().left
scrollTop()获取元素的滚动条和顶端的距离$("p").scrollTop();
scrollLeft()获取元素的滚动条和左侧的距离$("p").scrollLeft();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值