jQuery中的DOM

1. DOM操作的分类
1.1 DOM Core(核心)

JavaScript中的 getElementById()、getElementsByTagName()、getAttribute()和setAttribute()等都是DOM Core的组成部分;

1.2 HTML_DOM

提供了一些更简明的记号来描述各种HTML元素的属性,但是只能用来处理Web文档;

1.3 CSS_DOM

针对CSS的操作,获取和设置style对象的各种属性;

2. JQuery中的DOM操作

首先构建一个网页:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1-Strict.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title>DOM</title>
</head>
<body>
<p title ="选择你最喜欢的水果。">你最喜欢的水果是?</p>
<ul>
    <li title="苹果">苹果</li>
    <li title="菠萝">菠萝</li>
    <li title="橘子">橘子</li>
</ul>
<script src = "../Scripts/jquery-3.2.1.js" type = "text/javascript"></script>
<script type = "text/javascript">
</script>
</body>
</html>
它的DOM结构:


2.1查找节点

2.1.1查找元素节点

var $li = $("ul li:eq(1)");  //获取<ul>元素下的第二个<li>元素;
    var li_txt = $li.text();
    alert(li_txt);

2.1.2查找属性节点
利用jQuery选择器查找到需要的元素之后,就可以用attr()方法来获取它的各种属性的值。attr()方法的参数可以是一个或者两个。参数为1个时,则是要查询的属性的名字;

var $p = $("p");
    var para = $p.attr("title");
    alert(para);

2.2创建节点

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

2.2.1 创建元素节点

var $li_1 = $("<li></li>");
    var $li_2 = $("<li></li>");
    $("ul").append($li_1).append($li_2);

2.2.2 创建文本节点

var $li_1 = $("<li>西瓜</li>");
    var $li_2 = $("<li>葡萄</li>");
    $("ul").append($li_1).append($li_2);

2.2.3 创建属性节点
var $li_1 = $("<li title = '西瓜'>西瓜</li>");
    var $li_2 = $("<li title = '葡萄'>葡萄</li>");
    $("ul").append($li_1).append($li_2);

无论$(html)中的代码多么复杂,都要使用同样的方法创建。

2.3插入节点
jQuery提供的几种插入节点的方法:


html代码:

<p>我想说:</p>

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

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

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

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

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

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

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

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

注:插入节点的方法既可以用作将新创建的DOM元素插入到文档中,也可以用于对原有的DOM元素进行移动;

2.4 删除节点

jQuery提供了两种删除节点的方法:

2.4.1 remove()方法

从DOM元素中删除所有匹配的元素;

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

这种方法会删除匹配的元素以及其所有后代节点,返回一个指向被删除的元素的引用,即元素用remove()方法删除后,仍可以继续使用;

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

可通过传递参数来选择性的删除元素:

$("ul li").remove("li[title!='菠萝']");
2.4.2 empty()方法

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

$("ul li:eq(1)").empty();
2.5 复制节点
$("ul li").click(function () {
       $(this).clone().appendTo("ul"); 
    })
如果需要复制得到的节点也具有点击事件:

$("ul li").click(function () {
       $(this).clone(true).appendTo("ul");
    })
2.6 替换节点
replaceWith()方法和replaceAll()方法:

 $("p").replaceWith("<p>你最不喜欢的水果是?</p>");
replaceAll()只是颠倒了replaceWith()操作;

注:如果替换之前已为元素绑定事件,则替换后需要重新绑定;

2.7 包裹节点

将某个节点用其他标记包裹起来;wrap()方法:

    $("p").wrap("<b></b>");   //将<p>元素用<b>元素包裹起来;
其他方法:

2.7.1 wrapAll()方法

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

2.7.1 wrapInner()方法

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

2.8 属性操作

2.8.1 获取和设置属性(attr()方法)

获取属性时可以是一个或两个元素;设置属性时需要两个参数(属性,属性值);

如果需要一次设置多个属性值,(属性1:值1,属性2:值2);

注:jQuery中既能获取属性值,又能设置属性值的方法:attr()、html()、text()、height()、width()、val()和css()等方法。

2.8.2 删除属性:removeAttr()方法;

2.9 样式操作

2.9.1 获取和设置样式:attr()方法;

2.9.2 追加样式:addClass()方法;

注:css中的规定:

(1)如果给一个元素添加了多个class值,那么就相当于合并了它们的样式;

(2)如果有不同的class设置了同一样式,那么后者会覆盖前者;

2.9.3 删除样式:removeClass()方法;

删除多个样式:removeClass("class1" "class2");

删除全部样式:removeClass();

2.9.4 切换样式:

toggle();控制行为上的重复切换;

toggleClass();控制样式上的重复切换;(类名存在则删除,不存在则添加);

2.9.5 判断是否含有某样式:hasClass();有则返回true,没有则返回false;

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

html():只能用于XHTML,不能用于XML;

text():可以用于XHTML和XML;

val():用来设置和获取元素的值;无论元素是文本框、下拉列表还是单选框;如果元素为多选,则返回一个包含所有选择的值的数组;

用val()方法实现简单的登录界面的一个小功能:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1-Strict.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title>DOM</title>
</head>
<body>
<p title ="选择你最喜欢的水果。">你最喜欢的水果是?</p>
<ul>
    <li title="苹果">苹果</li>
    <li title="菠萝">菠萝</li>
    <li title="橘子">橘子</li>
</ul>
<input type="text" id="address" value="请输入邮箱地址"/><br/><br/>
<input type="text" id="password" value="请输入密码"/><br/><br/>
<input type="button" value="登录"/>
<script src = "../Scripts/jquery-3.2.1.js" type = "text/javascript"></script>
<script type = "text/javascript">
    $("#address").focus(function () {
       var $val_text = $(this).val();
       if($val_text == "请输入邮箱地址") {
           $(this).val("");
       }
    })
    $("#address").blur(function () {
        var $val_text = $(this).val();
        if($val_text == ""){
            $(this).val("请输入邮箱地址");
        }
    })
    $("#password").focus(function () {
        var $val_text = $(this).val();
        if($val_text == "请输入密码") {
            $(this).val("");
        }
    })
    $("#password").blur(function () {
        var $val_text = $(this).val();
        if($val_text == ""){
            $(this).val("请输入密码");
        }
    })
</script>
</body>
</html>
val()的选中功能:使下拉列表(select)、单选框(radio)、多选框(checkbox)相应的选项被选中;

例如:

$("#single").val("选择1号");
    $("#multiple").val(["选择1号","选择2号"]);
注:在jQuery中,val()方法是从最后一个选项往前读取,如果选项的text或者value的值中任意一项符合要求,就会被选中;

2.11 遍历节点

 children()方法
用于取得匹配元素的子元素集合;(只考虑子元素,不考虑其他任何后代元素);

next()方法

用于取得匹配元素后面紧邻的同辈元素

prev()方法

用于取得匹配元素前面紧邻的同辈元素

siblings()方法

用于取得匹配元素前后所有的同辈元素

closet()方法

用来取得最近的匹配元素,首先检查当前元素是否匹配,匹配则返回元素本身,不匹配则向上查找父元素,逐级向上查找,直到找到匹配的元素,如果没有则返回一个空的jQuery对象;

2.12 CSS中的DOM操作

可以用css()方法获取和设置样式;

offset()方法:

获取元素在当前视窗的相对偏移,返回的对象包含两个属性(top和left),它只对可见元素有效;

获取元素相对于最近的一个position样式属性设置为relative或者absolute的祖父节点的相对偏移,返回的对象包含两个属性(top和left)

scrollTop()和scrollLeft()方法:

获取元素的滚动条距顶端和距左侧的距离;

3.案例研究——超链接和图片提示效果

1.超链接

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1-Strict.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title>DOM</title>
    <style>
        .a{
            color: crimson;
        }
    </style>
</head>
<body>
<p title ="选择你最喜欢的水果。">你最喜欢的水果是?</p>
<ul>
    <li title="苹果">苹果</li>
    <li title="菠萝">菠萝</li>
    <li title="橘子">橘子</li>
</ul>
<input type="text" id="address" value="请输入邮箱地址"/><br/><br/>
<input type="text" id="password" value="请输入密码"/><br/><br/>
<input type="button" value="登录"/>
    <p><a href="#" class="tooltip" title="这是我的第一个提示">提示1.</a> </p>
    <p><a href="#" class="tooltip" title="这是我的第二个提示">提示2.</a> </p>
    <p><a href="#" title="这是自带提示1">自带提示1.</a> </p>
    <p><a href="#" title="这是自带提示2">自带提示2.</a></p>
<script src = "../Scripts/jquery-3.2.1.js" type = "text/javascript"></script>
<script type = "text/javascript">
    var $li = $("ul li:eq(1)");  //获取<ul>元素下的第二个<li>元素;
    var li_txt = $li.text();
    alert(li_txt);
    var $p = $("p");
    var para = $p.attr("title");
    alert(para);
    var $li_1 = $("<li title= '西瓜'>西瓜</li>");
    var $li_2 = $("<li title= '葡萄'>葡萄</li>");
    $("ul").append($li_1).append($li_2);
    $("ul li").click(function () {
       $(this).clone(true).appendTo("ul");
    })
    $("#address").focus(function () {
       var $val_text = $(this).val();
       if($val_text == "请输入邮箱地址") {
           $(this).val("");
       }
    })
    $("#address").blur(function () {
        var $val_text = $(this).val();
        if($val_text == ""){
            $(this).val("请输入邮箱地址");
        }
    })
    $("#password").focus(function () {
        var $val_text = $(this).val();
        if($val_text == "请输入密码") {
            $(this).val("");
        }
    })
    $("#password").blur(function () {
        var $val_text = $(this).val();
        if($val_text == ""){
            $(this).val("请输入密码");
        }
    })
    var x=10;
    var y=20;
    $("a.tooltip").mouseover(function (e) {
        this.myTitle = this.title;
        this.title = "";
        var tooltip ="<div id='tooltip'>"+this.myTitle+"</div>";
        console.log(tooltip);
        $("body").append(tooltip);
        $("#tooltip").css(
            {
                "top":(e.pageY+y) + "px",
                "left":(e.pageX+x) + "px"
            }
        ).show("fast");
    }).mouseout(function () {
        this.title = this.myTitle;
        $("#tooltip").remove();
    }).mousemove(function (e) {
        $("#tooltip").css(
            {
                "top":(e.pageY+y) + "px",
        "left":(e.pageX+x) + "px"
    })
    })
</script>
</body>
</html>
2.图片提示

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1-Strict.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title>图片提示效果</title>
    <style type="text/css">
        body{
            margin:0;
            padding:40px;
            background:#fff;
            font:80% Arial, Helvetica, sans-serif;
            color:#555;
            line-height:180%;
        }
        img{border:none;}
        ul,li{
            margin:0;
            padding:0;
        }
        li{
            list-style:none;
            float:left;
            display:inline;
            margin-right:10px;
            border:1px solid #AAAAAA;
        }

        /* tooltip */
        #tooltip{
            position:absolute;
            border:1px solid #ccc;
            background:#333;
            padding:2px;
            display:none;
            color:#fff;
        </style>
</head>
<body>
<ul>
    <li><a href="images/apple_1_bigger.jpg" class="tootip" title="苹果ipod"><img src="images/apple_1.jpg" alt="苹果ipod"/></a> </li>
    <li><a href="images/apple_2_bigger.jpg" class="tootip"  title="苹果ipod nano"><img src="images/apple_2.jpg" alt="苹果ipod nano"/> </a></li>
    <li><a href="images/apple_3_bigger.jpg" class="tootip"  title="苹果iphone"><img src="images/apple_3.jpg" alt="苹果iphone"/></a></li>
    <li><a href="images/apple_4_bigger.jpg" class="tootip"  title="苹果Mac"><img src="images/apple_4.jpg" alt="苹果Mac"/></a></li>
</ul>
<script src = "../Scripts/jquery-3.2.1.js" type = "text/javascript"></script>
<script type = "text/javascript">
$(function () {
    var x=10;
    var y=20;
    $("a.tootip").mouseover(function (e) {
        this.myTitle=this.title;
        this.title="";
        var imgTitle =this.myTitle? "<br/>" + this.myTitle:"";
        var tooltip ="<div id='tootip'><img src='"+this.href+"' alt='产品预览图'/>"+imgTitle+"</div>"; //创建<div>元素;
        $("body").append(tooltip);
        $("#tooltip").css(
            {
                "top":(e.pageY+y) + "px",
                "left":(e.pageX+x) + "px"
            }
        ).show("fast");
    }).mouseout(function () {
        this.title=this.myTitle;
        $("#tootip").remove();
    }).mousemove(function (e) {
        $("#tootip")
            .css({
                "top":(e.pageY+y)+"px",
                "left":(e.pageX+x)+"px"
            });
    });
});
</script>
</body>
</html>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值