Files
notes_estom/JavaScript/jQuery/13 Dom.md
2024-01-13 17:25:31 +08:00

11 KiB
Raw Blame History

DOM 是 Document Object Model 的缩写,译为 文档对象模型。根据 W3C DOM 规范DOM 是一种与浏览器、平台、语言无关的接口,使用该接口可以轻松地访问页面中所有的标准组件。

jQuery 中另一个重要的组成部分就是封装了原生 DOM 的操作。

基本操作

html操作

html() 方法用于读取或设置指定元素的 HTML 代码,类似于原生 DOM 中的 innerHTML 属性。

//获取<p>元素的HTML代码
$("input:eq(0)").click(function(){
    alert(  $("p").html() );
});
//设置<p>元素的HTML代码
$("input:eq(1)").click(function(){
    $("p").html("<strong>你最讨厌的水果是?</strong>");
});

文本操作

text() 方法用于读取或设置指定元素的文本内容,类似于原生 DOM 中的 textContent 属性。

//获取<p>元素的文本
$("input:eq(0)").click(function(){
    alert(  $("p").text() );
});
//设置<p>元素的文本
$("input:eq(1)").click(function(){
    $("p").text("你最讨厌的水果是?");
});

值操作

val() 方法用于读取或设置指定元素的 value 属性值,类似于原生 DOM 中的 value 属性。

//获取按钮的value值
$("input:eq(0)").click(function(){
   alert( $(this).val() );
});
//设置按钮的value值
$("input:eq(1)").click(function(){
   $(this).val("我被点击了!");
});

属性操作

  • attr() 方法用于获取或设置指定元素的属性,类似于原生 DOM 中的 getAttribute() 方法和 setAttribute() 方法。
  • removeAttr() 方法用于删除指定元素的属性,类似于原生 DOM 中的 removeAttribute() 方法。
//设置<p>元素的属性'title'
$("input:eq(0)").click(function(){
   $("p").attr("title","选择你最喜欢的水果.");
});
//获取<p>元素的属性'title'
$("input:eq(1)").click(function(){
   alert( $("p").attr("title") );
});
//删除<p>元素的属性'title'
$("input:eq(2)").click(function(){
   $("p").removeAttr("title");
});

样式操作

操作样式主要分成两种:

  • 一种是使用style属性直接设置CSS中的属性
  • 一种是使用class样式名称设置CSS。

attr() 方法操作

class 本身就是元素中的一个属性,所以也可以使用设置属性方式来设置或删除 class 样式。

语法结构:

element.attr("class",className)

值得注意的是: 使用 attr() 方法设置 class 样式时,无论之前是否包含 class 属性,之前设置的样式都会被覆盖。

//<input type="button" value="采用属性增加样式"  id="b1"/>
$("#b1").click(function(){
   $("#mover").attr("class","one");
})

addClass() 方法操作

addClass() 方法表示追加样式,也就是说,无论之前是否包含 class 样式,调用 addClass() 方法只是在其基础上增加一个新的样式。而之前设置的样式依旧存在。

//<input type="button" value=" addClass"  id="b2"/>
$("#b2").click(function(){
   $("#mover").addClass("mini");
})

removeClass() 方法操作

removeClass() 方法表示删除样式,但该方法的使用有以下三种方式:

  • removeClass(): 默认不传递任何参数,表示删除所有样式。
  • removeClass(className): 传递一个样式名称,表示删除指定一个样式。
  • removeClass(className1 className2): 传递多个样式名称,中间使用空格隔开,表示删除指定多个样式。
//<input type="button" value="removeClass"  id="b3"/>
$("#b3").click(function(){
   $("#mover").removeClass();
})

toggleClass() 方法操作

toggleClass() 方法表示在没有样式与指定样式之间进行切换,效果相当于使用 addClass() 方法和 removeClass() 方法。

//<input type="button" value=" 切换样式"  id="b4"/>
$("#b4").click(function(){
   // 在没有样式与指定样式之间切换
   $("#mover").toggleClass("one");
})

hasClass() 方法操作

hasClass() 方法表示指定元素是否包含指定样式。

值得注意的是: hasClass() 方法并不能判断是否包含样式,而是判断是否包含指定样式。

//<input type="button" value=" hasClass"  id="b5"/>
$("#b5").click(function(){
   // 判断是否含有某个指定样式
   alert($("#mover").hasClass("one"));
})

css() 方法操作

css() 方法也可以获取或设置 CSS 样式,但并不是通过 class 属性,而是通过 style 属性直接设置 CSS 中的属性。

获取样式:

css(attrName) 方法,用于获取当前 style 属性的值。

设置样式:

  • css(attrName,attrValue) 方法,用于设置当前 style 属性的值。但每次只能设置一个CSS中的属性。
  • css({attrName:attrValue,attrName:attrValue,…}) 方法,用于设置当前 style 属性的值。每次可以设置多个CSS中的属性。

遍历节点

获取父元素

parent() 方法可以获取指定元素的父元素。

  • parent() 方法: 不传递任何参数,是获取指定元素的父元素。
  • parent(selector) 方法: 是获取指定元素的符合 selector 选择器的父元素。
var $parent = $("li:first").parent();	//第一个<li>元素的父元素

获取子元素

children() 方法可以获取指定元素的子元素。

  • children() 方法: 不传递任何参数,可以获取指定元素的所有子元素。
  • children(selector) 方法: 是获取指定元素的符合 selector 选择器的子元素。
var $ul = $("ul").children();
alert( $ul.length );//<p>元素下有3个子元素

获取兄弟元素

next() 方法是获取指定元素的下一个兄弟元素。

  • next() 方法: 不传递任何参数,是获取指定元素的下一个兄弟元素。
  • next(selector) 方法: 是获取指定元素符合 selector 选择器的下一个兄弟元素。
var $p1 = $("p").next();
alert( $p1.html() );  //  紧邻<p>元素后的同辈元素

prev() 方法是获取指定元素的上一个兄弟元素。

  • prev()方法: 不传递任何参数,是获取指定元素的上一个兄弟元素。
  • prev(selector) 方法: 是获取指定元素符合 selector 选择器的上一个兄弟元素。
var $ul = $("ul").prev();
alert( $ul.html() );  //  紧邻<ul>元素前的同辈元素

siblings() 方法是获取指定元素的所有兄弟元素。

  • siblings()方法: 不传递任何参数,是获取指定元素的所有兄弟元素。
  • siblings(selector) 方法:是获取指定元素符合 selector 选择器的所有兄弟元素。
var $p2 = $("p").siblings();
alert( $p2.html() );  //  紧邻<p>元素的唯一同辈元素

查找指定后代元素

find(selector) 方法,可以查找指定元素的符合 selector 选择器的后代元素。

var eles = $("ul").find("li");	//查找ul元素下的所有li元素

创建操作

按照原生 DOM 的思路,创建节点需要分别创建元素节点、文本节点和属性节点。

  • 元素节点,使用 jQuery 的工厂函数 $(HTML代码) 来创建。
  • 文本节点,使用 jQuery 的 text() 方法进行设置文本,而不需要创建文本节点。
  • 属性节点,使用 jQuery 的 attr() 方法进行设置属性,而不需要创建属性节点。

其实,使用 jQuery 创建元素,并不需要按照原生 DOM 的思路进行创建。可以一步代码创建完整的元素。

//创建一个<li>元素 包括元素节点,文本节点和属性节点
var $li = $("<li title='香蕉'>香蕉</li>");

// 获取<ul>节点 <li>的父节点
var $parent = $("ul");

// 添加到<ul>节点中,使之能在网页中显示
$parent.append($li);

插入操作

jQuery 中的插入操作分为内部插入和外部插入。

内部插入

  • append() 方法: 将 append() 后面的元素插入在 append() 前面指定元素的后面。
  • prepend() 方法: 将 prepend() 后面的元素插入在 prepend() 前面指定元素的前面。
  • appendTo() 方法: 将 appendTo() 前面的元素插入在 appendTo() 后面的元素的后面。
  • prependTo() 方法: 将 prependTo() 前面的元素插入在 prependTo() 后面的元素的前面。
// append - append后面的节点被添加到append前面的节点的后面
$("#tj").append($("#ms"));

// prepend - prepend后面的节点被添加到prepend前面的节点的前面
$("#tj").prepend($("#ms"));

// appendTo - appendTo前面的节点被添加到appendTo后面的节点的后面
$("#tj").appendTo($("#ms"));

// prependTo - prependTo前面的节点被添加到prependTo后面的节点的前面
$("#tj").prependTo($("#ms"));

外部插入

  • before() 方法: 将 before() 后面的元素插入在 before() 前面的指定元素的前面。
  • after() 方法: 将 after() 后面的元素插入在 after() 前面的指定元素的后面。
  • insertBefore() 方法: 将 insertBefore() 前面的元素插入在 insertBefore() 后面的指定元素的前面。
  • insertAfter() 方法: 将 insertAfter() 前面的元素插入在 insertAfter() 后面的指定元素的后面。
// before - before后面的节点被添加到before前面的节点的前面
$("#tj").before($("#ms"));

// after - after后面的节点被添加到after前面的节点的后面
$("#tj").after($("#ms"));

// insertBefore
$("#tj").insertBefore($("#ms"));

// insertAfter
$("#tj").insertAfter($("#ms"));

删除操作

jQuery 中的删除操作分别为 remove() 方法和 empty() 方法。

  • remove() 方法: 删除自身元素及所有后代元素。
  • empty() 方法: 删除所有后代元素,但保留自身元素。该方法适合完成清空操作。
$("ul li:eq(1)").remove(); // 获取第二个<li>元素节点后,将它从网页中删除

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

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

替换操作

jQuery 中的替换操作分别为 replaceWith() 方法和 replaceAll() 方法。

  • replaceWith() 方法: 该方法前面的元素是被替换元素。
  • replaceAll() 方法: 就是颠倒了的repalceWith( )方法。
$("p").replaceWith("<strong>你最不喜欢的水果是?</strong>");
// 同样的实现: $("<strong>你最不喜欢的水果是?</strong>").replaceAll("p");

复制操作

jQuery 中的复制操作使用的方法为 clone() 方法,该方法与原生 DOM 中的复制节点的方法cloneNode() 在使用时极为相似。

  • 原生 DOM 中的 cloneNode(Boolean) 方法,参数 Boolean 表示是否复制后代节点。
  • jQuery 中的 clone(Boolean) 方法,参数 Boolean 表示是否复制事件。
$("ul li").click(function(){
   $(this).clone().appendTo("ul"); // 复制当前点击的节点,并将它追加到<ul>元素
   $(this).clone(true).appendTo("ul"); // 注意参数true
   //可以复制自己,并且他的副本也有同样功能
})