jQuery中的DOM操作

为了全面的讲解DOM操作,由于每一张网页都能用DOM表示,而每一份DOM都可以看做一个,首先需要构建一个网页。网页效果如下:

HTML代码如下:

<!-- 省略其他代码 -->
<p>你喜欢的NBA球星是?</p>
<ul>
<li title="威少">威少</li>
<li title="杜兰特">杜兰特</li>
<li title="库里">库里</li>
</ul>

<!-- 省略其他代码 -->

根据上面的网页构建出一颗DOM树,如下图所示:

接下来,对DOM的操作都将围绕该DOM树而展开。

1.1、查找节点

1.查找元素节点

获取元素节点并打印出它的文本内容,jQuery代码如下:

 var $li = $("ul li:eq(1)")//获取<ul>里第二个<li>节点
 var li_txt = $li.text();//获取<ul>里第二个<li>节点的文本内容
  alert(li_txt);//打印文本内容

2.查找属性节点

利用jq选择器查找到需要的元素以后,可以利用attr()方法来获取它的各种属性的值。attr()方法的参数可以是一个,也可以是两个。当参数为一个时,则是要查询的属性的名字,

例如:

获取属性节点并打印出来它的文本内容,jq代码如下:

  var $para = $("p");//获取<p>节点
  var p_txt = $para.attr("title");//获取<p>节点的title属性
  alert(p_txt);//打印出获取<p>节点的title属性

1.2、创建节点

1.创建元素节点

$(html)方法。

$(html)方法会根据传入的HTML标记字符串,创建一个DOM对象,并将这个DOM对象包装成一个jq对象。

创建两个<li>元素,jq代码如下:

var $li_1 = $("<li></li>");//创建第一个<li>元素
var $li_2 = $("<li></li>");//创建第二个<li>元素

 

然后将这两个新元素插入到文档中,可以使用jq中的append()等方法,jq代码如下:

$("ul").append($li_1).append($li_2)

注意:当创建单个元素时要正确标签和使用标准的XHTML格式。

例如创建一个<p>元素,可以用$("<p/>")或者$("<p></p>"),但是不要使用$("<p>")或者大写的$("<P/>");

2.创建文本节点

已经创建了两个<li>元素节点并把它们插入到了文档中,此时需要为创建的元素节点添加文本内容。

 var $li_1 = $("<li>詹姆斯</li>");//创建一个<li>元素,包括元素节点和文本节点,'詹姆斯'就是创建的文本节点
 var $li_2 = $("<li>小托马斯</li>");//创建一个<li>元素,包括元素节点和文本节点,'小托马斯'就是创建的文本节点
 $("ul").append($li_1).append($li_2)//添加到<ul>节点中

3.创建属性节点

创建属性节点预创建文本节点类似,直接在创建元素节点时一起创建。jq代码如下:

var $li_1 = $("<li title='詹姆斯'>詹姆斯</li>");//创建一个<li>元素,包括元素节点和文本节点,title='詹姆斯'就是创建的属性节点
var $li_2 = $("<li title='小托马斯'>小托马斯</li>");//创建一个<li>元素,包括元素节点和文本节点,title='小托马斯'就是创建的属性节点
$("ul").append($li_1).append($li_2)//添加到<ul>节点中

1.3、插入节点

jq中插入节点的方法

 

jq中插入节点的方法
append()向每个匹配的元素内追加属性
HTML代码:
<p>我想说:</p>
jq代码:
$("p").append("<b>你好</b>")
结果:
<p>我想说:<b>你好</b></p>
appendTo()将所有匹配的元素追加到指定的元素中。HTML代码:
<p>我想说:</p>
jq代码:
$("<b>你好</b>").appendTo("p")
结果:
<p>我想说:<b>你好</b></p>
prepend()向每个匹配的元素内部前置内容HTML代码:
<p>我想说:</p>
jq代码:
$("p").prepend("<b>你好</b>")
结果:
<p><b>你好</b>我想说:</p>
prependTo()将所有匹配的元素前置到指定的元素中。HTML代码:
<p>我想说:</p>
jq代码:
$("<b>你好</b>").prependTo("p")
结果:
<p><b>你好</b>我想说:</p>
after()在每个匹配的元素之后插入内容

HTML代码:
<p>我想说:</p>
jq代码:
$("p").after("<b>你好</b>")
结果:
<p>我想说:</p><b>你好</b>
insertAfter()将所有匹配的元素插入到指定元素的后面。HTML代码:
<p>我想说:</p>
jq代码:
$("<b>你好</b>").insertAfter("p")
结果:
<p>我想说:</p><b>你好</b>
before()在每个匹配的元素之前插入内容HTML代码:
<p>我想说:</p>
jq代码:
$("p").before("<b>你好</b>")
结果:
<b>你好</b><p>我想说:</p>
insertBefore()将所有匹配的元素插入到指定元素的前面。HTML代码:
<p>我想说:</p>
jq代码:
$("<b>你好</b>").insertBefore("p")
结果:
<b>你好</b><p>我想说:</p>

 

1.4、删除节点

 

jq中提供了三种删除节点的方法,即:remove(),datach()empty()

1.remove()方法。

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

例如删除<ul>节点中的第二个<li>元素节点,jq代码如下:

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

当某个节点用remove()方法删除后,该节点所包含的所有后代节点将同时被删除。这个方法的返回值是一个指向已被删除的节点的引用,因此可以在以后在使用这些元素。下面的jq代码说明元素用remove()方法删除后,还可以继续使用。

 

 var $li = $("ul li:eq(1)").remove()//获取<ul>里第二个<li>节点,将它从网页中删掉
 $li.appendTo('ul')//把刚才删掉的节点又重新添加到<ul>元素里面

另外remove()方法也可以通过传递参数来选择性的删除元素,jq代码如下:

$("ul li").remove("li[title != 威少]");//将<li>元素中属性不等于"威少"的<li>元素删除

2.detach()方法

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

通过下面的例子,可以知道它与remove();方法的区别,jq代码如下:

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

3.empty()方法

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

jq代码如下:

$("ul li:eq(1)").empty();//获取<ul>里第二个<li>节点,清空此元素里面的内容,注意是元素

1.5、复制节点

clone()方法

可以利用clone()方法来完成对元素节点的复制,jq代码如下:

$("ul li").click(function(event) {
     $(this).clone().appendTo('ul');//复制当前节点,并把它添加到<ul>元素中
});

复制节点后,被复制的新元素并不具有任何行为。如果需要新元素也具有当前节点具有的事件,只需要在clone()方法中传递一个参数true,它的含义是:复制元素的同时复制元素所绑定的事件。

jq代码如下:

 $("ul li").click(function(event) {
       $(this).clone(true).appendTo('ul');//复制当前节点,并把它添加到<ul>元素中,新元素也具有复制功能
 });

1.6、替换节点

replaceWith()replaceAll()方法

replaceWith()方法的作用是将所有匹配的元素替换成指定的HTML或者DOM元素。

replaceAll()方法与replaceWith()方法的作用相同,只是颠倒了replaceWith()操作。

jq代码如下:

 $("p").replaceWith("<em>戴维斯.安东尼</em>")
 $("<em>戴维斯.安东尼</em>").replaceAll('p')

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

1.7、包裹节点

如果要将某个节点用其他标记包裹起来,jq提供了以下几种方法:

wrap(),wrapAll()wrapInner()

1.wrapAll()方法

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

现在在网页中再加入一个<strong>元素。

HTML代码如下:

<!-- 省略其他代码 -->
<strong title="你喜欢的NBA球星是?">你喜欢的NBA球星是?</strong>
<strong title="你喜欢的NBA球星是?">你喜欢的NBA球星是?</strong>
<ul>
<li title="威少">威少</li>
<li title="杜兰特">杜兰特</li>
<li title="库里">库里</li>
</ul>
<!-- 省略其他代码 -->

如果使用wrap()方法包裹<strong>元素,jq代码如下:

$("strong").wrap("<b></b>")

将会得到如下结果:

<b><strong title="你喜欢的NBA球星是?">你喜欢的NBA球星是?</strong></b>
<b><strong title="你喜欢的NBA球星是?">你喜欢的NBA球星是?</strong></b>

使用wrapAll()方法包裹,jq代码如下:

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

将会得到以下结果:

<b><strong title="你喜欢的NBA球星是?">你喜欢的NBA球星是?</strong>

<strong title="你喜欢的NBA球星是?">你喜欢的NBA球星是?</strong></b>

2.wrapInner()方法

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

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

结果如下:

<strong title="你喜欢的NBA球星是?"><b>你喜欢的NBA球星是?</b></strong>

1.8、属性操作

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

1.获取属性和设置属性

jq代码如下:

获取<p>元素的title属性

var $para = $("p");//获取<p>节点
var p_txt = $para.attr("title");//获取<p>节点的title属性

设置<p>元素的属性,jq代码如下:

$("p").attr("title","姚明");//设置单个属性值
$("p").attr({"title":"姚明","name":"player"});//设置多个属性值

注意:jq中有很多方法都是同一个函数实现获取(getter)和设置(setter)的,类似的还有:html(),text(),height(),width(),val()和css()等方法。

2.删除属性

removeAttr() 方法。

代码如下:

$("p").removeAttr('title');//删除<p>元素的title属性

1.9、样式操作

1.获取样式和设置样式

HTML代码如下:

<p class="myClass" title="你喜欢的NBA球星是?">你喜欢的NBA球星是?</p>现货区

由于class也是<p>元素的属性,可以通过attr()方法获取和设置<p>元素的class属性 代码如下:

var p_class = $("p").attr("class");//获取<p>的class
$("p").attr("class","high")//设置<p>的class  此时<p>元素的class变为high原来的class(myClass)被替换;如果此时需要追加效果可以通过addClass()方法;

2.追加样式

addClass()方法。

$("p").addClass("another");//此时<p>元素的class为"myClass another ";

3.移除样式

removeClass()方法。

它的作用是从匹配的元素中删除全部或者指定的class。

jq代码如下:

$("p").removeClass("myClass");//删除<p>元素的class(myClass);

另外,可以通过空格的方式删除多个class名 jq代码如下:

$("p").removeClass("myClass another");//删除多个class;

当removeClass()不带参数时,会删除全部的class;jq代码如下:

$("p").removeClass();//删除<p>元素全部的class

4.切换样式

toggleClass()方法。

如果类名存在就删除它,如果类名不存在则添加它。

jq代码如下:

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

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

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

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

1.html()方法。

此方法类似于javascript中的innerHTML属性,可以用来读取和设置某个元素中HTML内容。jq代码如下:

var p_html = $("p").html();//获取<p>元素的HTML代码

也可以利用html()方法设置元素的html代码,jq代码如下:

$("p").html("the best player");//设置<p>元素的HTML代码

注意:html()方法可以用于XHTML文档,但不能用于XML文档。

2.text()方法

此方法类似于javascript中的innerText属性,可以用来读取或者设置某个元素中的文本内容。jq代码如下:

 

var p_text= $("p").text();//获取<p>元素的文本内容

也可以利用text()方法设置元素的文本内容,jq代码如下:

$("p").text("the best player");//设置<p>元素的文本内容

注意:jq的text()方法支持所有浏览器,而javascript中的innerText属性并不支持Firefox浏览器。text()方法对HTML文档和XML文档都有效。

3.val()方法

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

val()方法还可以使select(下拉框)、checkbox(多选框)和radio(单选框)相应的项被选中。

1.11、遍历节点

children()方法、next()方法、prev()方法、siblings()方法、closeset()方法

1.children()方法

该方法用于取得匹配元素的子元素集合

$("ul").children();//获取<ul》元素下的三个<li>子元素

注意:children()方法只考虑子元素而不考虑其他后代元素

2.next()方法

该方法用于取得匹配元素后面紧邻的同辈元素。从DOM树中可以知道<p>元素的下一个同辈节点是<ul>,可以通过以下代码获取:

$("p").next();

3.prev()

匹配元素前面紧邻的同辈元素

$("ul").prev();//获取<p>元素

4.siblings()方法

匹配元素前后所有同辈元素。

$("p").siblings();//获取<ul>元素

5.closet()方法

用于取得最近的匹配元素(祖先元素)

$("li").closet("ul");//获取<ul>元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值