jQuery学习笔记(四)jQuery遍历、DOM操作

jQuery学习笔记(四)jQuery遍历、DOM操作

一、DOM操作(增删改查)

1、新增节点

$(selector).append(content)			在匹配元素内部最后面新增一个节点
$(content).appendTo(selector)		
把新节点追加到匹配元素内部最后面(效果同append,只是书写上前后位置互换)

$(selector).prepend(content)			在匹配元素内部最前面新增一个节点
$(content).prependTo(selector)		
把新节点追加到匹配元素内部最前面(效果同prepend,只是书写上前后位置互换)

$(selector).after(content)				在匹配元素同级之后新增一个节点
$(content).insertAfter(selector		
把新节点追加到匹配元素同级之后(效果同insertAfter,只是书写上前后位置互换)

$(selector).before(content)			在匹配元素同级之前新增一个节点
$(content).insertBefore(selector)		
把新节点追加到匹配元素同级之前(效果同insertBefore,只是书写上前后位置互换)

演示:

html代码:

<body>
    <input type="button" value="btn">
    <ol class="list">
        <li>吃饭</li>
        <li>睡觉</li>
    </ol>
</body>

jquery代码:

<script src="../js/jquery-3.3.1.min.js"></script>
    <script src="../js/cities.js"></script>
    <script src="../js/jquery.validate.min.js"></script>
    <script>
        jQuery(function () {
            /*
                内部新增
                    A.append(B)       在节点内部的末尾处新增
                    B.appendTo(A)
            */
            // 1. 给按钮绑定一个单击事件
            jQuery("input").click(function () {
                // 2. 新增一个 li 标签
                var newLi = "<li>打地鼠</li>";
                // 3. 将新增的 li 标签, 拼接到类名为 list 的有序列表中
                // $(".list").append(newLi);

                jQuery(newLi).appendTo(".list");
            });

            /*
                    A.prepend(B)   在节点内部的最前面新增
                    B.prependTo(A)
            */
            jQuery("input").click(function () {
                var newLi = "<li>打地鼠</li>";
                // $(".list").prepend(newLi);

                jQuery(newLi).prependTo(".list");
            });

            /*
                同级新增
                    A.after(B)    同级之后
                    B.insertAfter(A)
            */
            jQuery("input").click(function () {
                var newLi = "<li>打地鼠</li>";
                // $(".list").after(newLi);

                $(newLi).insertAfter(".list");
            });

            /*
                    A.before(B)       同级之前
                    B.insertBefore(A)
             */
            $("input").click(function () {
                var newLi = "<li>打地鼠</li>";
                // $(".list").before(newLi);

                $(newLi).insertBefore(".list");
            });
        });
        
    </script>

其他操作图类型如下:

2、删除节点

remove()		删除节点,斩草除根,全部删除
empty()		清空节点,斩草留根,只清空内部的东西,保留最外面的标签

演示:

html代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        .list{
            width: 400px;
            margin: 50px auto;
        }
        .list li{
            list-style: none;
            height: 50px;
            line-height: 50px;
            border-bottom: 1px dashed #ccc;
        }
        .list a{
            float: right;
        }
    </style>

    <script src="../js/jquery-3.3.1.min.js"></script>
    <script>
        $(function () {
            // 点击 a 标签, 删除元素
        });
    </script>

</head>
<body>
<ul class="list">
    <li>
        商品信息1
        <a href="#">删除</a>
    </li>
    <li>
        商品信息2
        <a href="#">删除</a>
    </li>
    <li>
        商品信息3
        <a href="#">删除</a>
    </li>
</ul>
</body>
</html>

jquery代码:

<script src="../js/jquery-3.3.1.min.js"></script>
<script>
    $(function () {
        // 点击 a 标签, 删除元素
        // 1. 获取 a 标签, 并绑定事件
        $("a").click(function () {
            // 2.1 删除 (将所有的 a 标签全部删除了)
            // $("a").remove();

            // 2.2 删除 (删除当前被点击的 a 标签)
            // this.remove();
            // $(this).remove();

            // 2.3 删除 (被点击 a 标签的 parent() 父标签)
            // $(this).parent().remove();  // li 标签就是 `根`

            // 2.4 empty 清空
            $(this).parent().empty();
        });
    });
</script>

3、替换节点

$(selector).replaceWith(content)	  100%把旧的替换掉

演示:

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>替换节点</title>
    <script src="../js/jquery-3.3.1.min.js"></script>
    <script>
        $(function () {
            // 需求: 点击按钮, 将div标签替换为h1标签
        });
    </script>
</head>
<body>
<button>替换节点</button>
<div id="box">这是一个div节点.</div>
</body>
</html>

jquery代码:

 

<script src="../js/jquery-3.3.1.min.js"></script>
<script>
    $(function () {
        // 需求: 点击按钮, 将div标签替换为h1标签
        // 1. 为 button 按钮绑定一个单击事件
        $("button").click(function () {
            // 2. 准备替换的内容
            var h1 = "<h1>我是h1标签</h1>";
            // 3. 替换
            $("#box").replaceWith(h1);
        });
    });
</script>

二、jQuery遍历函数

1、概述

jquery对象本身就是数组对象,通过jquery选择器获得的都是满足该选择器条件的对象的集合体。因此在常常需要对jquery对象进行遍历。我们会学

下图展示了一个家族树。通过 jQuery 遍历,您能够从被选(当前的)元素开始,轻松地在家族树中向上移动(祖先),向下移动(子孙),水平移动(同胞)。这种移动被称为对 DOM 进行遍历。

图示解释:

JQuery有三种遍历方法、

注意:不管哪种遍历方式,遍历的集合中的每一个元素都是JS对象,因此想要使用JQ的方法需要加$()

2、原始方式遍历

for循环进行遍历

for(var i=0 ; i<Jq对象.length ; i++){
console.log();
}

演示:

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jquery遍历</title>

    <script src="../js/jquery-3.3.1.min.js"></script>
    <script>
        $(function () {
            // 遍历方式 :
            
        });
    </script>
    
</head>
<body>
<ul class="list">
    <li style="color: red;">1</li>
    <li style="color: red;">2</li>
    <li style="color: red;">3</li>
    <li style="color: red;">4</li>
</ul>
</body>
</html>

jquery代码:

<script src="../js/jquery-3.3.1.min.js"></script>
<script>
    $(function () {
        // 遍历方式 : length
        // 1. 获取 li 标签
        var lis = $("li");
        // 2. 遍历
        for (var i = 0; i < lis.length; i++) {
            console.log(i + " = " + lis[i] + " = " + lis[i].innerHTML);
            // console.log(i + " = " + lis[i] + " = " + $(lis[i]).html());
        }
    });
</script>

3、jquery对象的方法

说明:此方式是jquery特有的遍历方式,使用jquery集合对象调用each方法即可遍历。

格式:

Jq对象.each(function(index,element){
alert(index); 	//打印索引
alert(element); //打印集合对象中的每一个元素
})
$(element).css('color','red');在使用的时候必须加选择器环境$()
经验:一般我们很少去用element这个参数,this在这里等同于element

演示:

html代码:同上

jquery代码:

<script src="../js/jquery-3.3.1.min.js"></script>
<script>
    $(function () {
        // 遍历方式 : jquery对象.each(function(index, element) {});
        $("li").each(function (index, element) {
            console.log(index + " = " + element + " = " + $(element).html())

            // 将当前遍历的元素, 颜色设置为 green.
            // 注意点 : element 是一个 JS 对象, 如果需要调用 jquery 方法, 需要将 JS 对象包装为 jquery 对象.
            $(element).css("color", "green");
        });
    });
</script>

4、jquery的全局方法

说明:此方式是jquery特有的遍历方式,与上面jquery的对象方法相似,但此处的each方法不是某个具体jquery对象的,而是jquery的全局对象的each方法,名字和功能虽然相同,但语法不同。

格式:

$.each(Jq对象,function(index,element){
alert(index); 		//打印索引
alert(element); 	//打印集合对象中的每一个元素
})

演示:

html代码:同上

jquery代码:

<script src="../js/jquery-3.3.1.min.js"></script>
<script>
    $(function () {
        // 遍历方式 : $.each(jquery对象, function(index, element) {});
        $.each($("li"), function (index, element) {
            console.log(index + " = " + element + " = " + $(element).html())

            // 将当前遍历的元素, 颜色设置为 green.
            // 注意点 : element 是一个 JS 对象, 如果需要调用 jquery 方法, 需要将 JS 对象包装为 jquery 对象.
            $(element).css("color", "green");
        });
    });
</script>

5、案例-省份与城市二级联动

方式一:

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>二级联动</title>

    <script src="../js/jquery-3.3.1.min.js"></script>
    <script>
        $(function () {
        // 1. 先准备区县的数组
        var cities = [
            ["朝阳区", "海淀区", "丰台区", "昌平区", "西城区", "东城区", "通州区", "大兴区"],
            ["浦东新区", "闵行区", "静安区", "徐汇区", "杨浦区", "嘉定区", "黄埔区"],
            ["白云区", "天河区", "花都区", "番禺区"]
        ];

        });
    </script>

</head>
<body>
    <select id="province">
        <option value="none">--请选择省--</option>
        <option value="0">北京市</option>
        <option value="1">上海市</option>
        <option value="2">广州市</option>
    </select>
    <select id="city">
        <option value="none">--请选择市--</option>
    </select>
</body>

</html>

jquery代码:

<script src="../js/jquery-3.3.1.min.js"></script>
<script>
    $(function () {
        // 1. 先准备区县的数组
        var cities = [
            ["朝阳区", "海淀区", "丰台区", "昌平区", "西城区", "东城区", "通州区", "大兴区"],
            ["浦东新区", "闵行区", "静安区", "徐汇区", "杨浦区", "嘉定区", "黄埔区"],
            ["白云区", "天河区", "花都区", "番禺区"]
        ];

        // 2. 为 `province` 绑定 change 更改事件
        $("#province").change(function () {

            // 清空方式一 : jquery 方法
            // $("#city").html("<option value=\"none\">--请选择市--</option>");
            // 清空方式二 : js 方法
            // document.getElementById("city").innerHTML = "<option value=\"none\">--请选择市--</option>";
            // 清空方式三 : options 数组 (是JS数组)
            // document.getElementById("city").options.length = 1;
            // 清空方式四 : 通过 get 方法将 jquery 转换为 js 对象.
            // $("#city").get(0).options.length = 1;
            $("#city")[0].options.length = 1;
            
            // 3. 获取当前省份的 value 值.
            var index = $("#province").val();

            // 4. 根据获取的 index, 从 cities 数组中取出对应的一维数组. 实现遍历
            $(cities[index]).each(function (index, element) {
                // console.log(index + " = " + element); element 就是我们需要的字符串

                // 5. 创建一个 option 元素
                var option = "<option value=\"none\">"+element+"</option>";

                // 6. 将 option 元素添加到 city 选择标签中
                $("#city").append(option);
            });
        });
    });
</script>

方式二:JSON、[]为数组、{}为对象

json代码:jsons.js

var china = [
    {
        "p_name": "吉林省",
        "p_id": "jl",
        "cities": [
            {
                "c_name": "长春",
                "c_id": "cc"
            },
            {
                "c_name": "四平",
                "c_id": "sp"
            },
            {
                "c_name": "通化",
                "c_id": "th"
            },
            {
                "c_name": "松原",
                "c_id": "sy"
            }
        ]
    },
    {
        "p_name": "辽宁省",
        "p_id": "ln",
        "cities": [
            {
                "c_name": "沈阳",
                "c_id": "sy"
            },
            {
                "c_name": "大连",
                "c_id": "dl"
            },
            {
                "c_name": "抚顺",
                "c_id": "fs"
            },
            {
                "c_name": "铁岭",
                "c_id": "tl"
            }
        ]
        
    },
    {
        "p_name": "山东省",
        "p_id": "sd",
        "cities": [
            {
                "c_name": "济南",
                "c_id": "jn"
            },
            {
                "c_name": "青岛",
                "c_id": "qd"
            },
            {
                "c_name": "威海",
                "c_id": "wh"
            },
            {
                "c_name": "烟台",
                "c_id": "yt"
            }
        ]
        
    },
    {
        "p_name": "上海市",
        "p_id": "sh",
        "cities": [
            {
                "c_name": "闵行区",
                "c_id": "mh"
            },
            {
                "c_name": "徐汇区",
                "c_id": "xh"
            },
            {
                "c_name": "黄浦区",
                "c_id": "hp"
            },
            {
                "c_name": "浦东新区",
                "c_id": "pd"
            }
        ]
        
    }
];

html代码:

<body>
    <select id="province">
        <option value="none">--请选择省--</option>
    </select>
    <select id="city">
        <option value="none">--请选择市--</option>
    </select>
</body>

jquery代码:

<script src="../js/jquery-3.3.1.min.js"></script>
 <!--导入 cities.js 文件-->
<script src="../js/jsons.js"></script>
<script>
    $(function () {
        // 说明 : jquery 可以实现 json 文件的遍历
        // 1. 遍历 cities JSON 格式的js文件.  china 是js文件中的变量名称
        $(china).each(function (index, element) {
            // console.log(index + " = " + element + " = " + element.p_id + " = " + element.p_name);
            // 2. 根据当前遍历的 element 对象, 获取到 option 标签对应的 value 和 内容.
            var province = "<option value='"+element.p_id+"'>"+element.p_name+"</option>";
            // 3. 将新建的标签拼接到 province 标签内容
            $("#province").append(province);
        });

        // 4. 给 `province` 标签绑定更改事件
        $("#province").change(function () {

            // 注意 : 当省份发生变化时, 需要清空城市
            $("#city").html("<option value=\"none\">--请选择市--</option>");

            // 5. 获取当前选中省份的 value 数值
            var p_id = $("#province").val();

            // 6. 遍历 china 数据, 查找与选中省份 p_id 相同的 element 标签对象
            $(china).each(function (index, element) {

                // 7. 将外部的 p_id 与 element 对象的 p_id 进行比较与判断
                if (p_id == element.p_id) {

                    // 8.  需要遍历当前 element 对象的 cities 数组
                    $(element.cities).each(function (index, element) {

                        // 9. 查看 element 对象的中 c_id 和 c_name 数据, 并完成 option 对象的字符串书写
                        // console.log(element.c_id + " = " + element.c_name);
                        var city = "<option value='"+element.c_id+"'>"+element.c_name+"</option>";

                        // 10. 将新建的 city 标签对象, 拼接到 city 的选项标签内部.
                        $("#city").append(city);
                    });
                }
            });
        });
    });
</script>

 

posted @ 2019-02-18 14:36  码农9300  阅读(287)  评论(0编辑  收藏  举报