前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零开始学 Web 之 DOM(五)元素的创建

从零开始学 Web 之 DOM(五)元素的创建

作者头像
Daotin
发布2018-08-31 11:08:59
8080
发布2018-08-31 11:08:59
举报

大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +------------------------------------------------------------ github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/ +----------------------------------------------------------- 在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!

一、元素的创建

1、元素创建的三种方式

1.1、方式一

document.write("标签代码及内容");

示例:

<body>
    <input type="button" value="按钮" id="btn">
    
    <script src="common.js"></script>
    <script>
        my$("btn").onclick = function() {
            document.write("<p>这是一个p标签</p>");
        };
        // document.write("<p>这是一个p标签</p>");
    </script>
</body>

缺陷:如果是在页面加载完毕后,通过这种方式创建元素的话,页面上的除此创建元素之外的所有内容都会被清除。但是在页面加载的时候不会。

1.2、方式二

标签.innerHTML = "标签代码及内容";

示例:

<body>
  <script>
    <input type="button" value="按钮" id="btn">
    <div id="dv"></div>
    <script src="common.js"></script>
    <script>
        my$("btn").onclick = function() {
            my$("dv").innerHTML = "lvonve";
        };
  </script>
</body>

使用 innerHTML,在页面加载完毕后,不会清除页面的内容。

案例:动态创建列表
// 方式一
<body>
    <input type="button" value="创建列表" id="btn">
    <div id="dv"></div>
    <script src="common.js"></script>
    <script>
        my$("btn").onclick = function() {
            my$("dv").innerHTML = "<ul><li>列表一</li><li>列表二</li><li>列表三</li></ul>";
        };
    </script>
</body>

方式一的方式太过死板,li 标签的个数和内容都是固定的,如果增加 li 的个数需要修改源码。

// 方式二
<body>
    <input type="button" value="创建列表" id="btn">
    <div id="dv"></div>
    <script src="common.js"></script>
    <script>
        var value = ["列表一", "列表二", "列表三", "列表四", "列表五"];
        my$("btn").onclick = function() {
            var str = "<ul style='list-style: none;cursor: pointer;'>"
            for(var i=0; i<value.length; i++) {
                str += "<li>"+value[i]+"</li>";
            }
            str += "</ul>";
            my$("dv").innerHTML = str;
        };
    </script>
</body>

1.3、方式三

第一步:创建元素,返回值为一个对象元素

document.creatElement("标签的名字");

第二步:将元素追加到父元素中

父元素.appendChild(创建的对象);

示例:

<body>
    <input type="button" value="创建列表" id="btn">
    <div id="dv"></div>
    <script src="common.js"></script>
    <script>
        my$("btn").onclick = function() {
            var pObj = document.createElement("p");
            setInnerText(pObj, "这是个p标签"); // 自己封装在 common.js 的方法
            my$("dv").appendChild(pObj);
        };
    </script>
</body>
案例:动态创建列表
<body>
    <input type="button" value="创建列表" id="btn">
    <div id="dv"></div>

    <script src="common.js"></script>
    <script>
        var values = ["列表1","列表2","列表3","列表4","列表5","列表6"];
        my$("btn").onclick = function() {
            var ulObj = document.createElement("ul");
            my$("dv").appendChild(ulObj);

            for(var i=0; i<values.length; i++) {
                var liObj = document.createElement("li");
                liObj.innerHTML = values[i];
                ulObj.appendChild(liObj);
              
                // 鼠标进入事件
                liObj.onmouseover = onmouseoverHandle;
                // 鼠标离开事件
                liObj.onmouseout = onmouseoutHandle;
            }
            function onmouseoverHandle() {
                this.style.backgroundColor = "yellow";
            }
            function onmouseoutHandle() {
                this.style.backgroundColor = "";
            }
        };
    </script>
</body>

当在循环中添加事件的时候,建议不使用匿名函数,因为每个匿名函数都会占用一片内存空间,而使用函数调用的方式,不管循环多少次,都使用一份代码。

案例:动态创建表格
<body>
    <input type="button" value="创建列表" id="btn">
    <div id="dv"></div>
    <script src="common.js"></script>
    <script>
        var arr = [
            {name:"百度", href:"www.baidu.com"},
            {name:"谷歌", href:"www.baidu.com"},
            {name:"优酷", href:"www.baidu.com"},
            {name:"土豆", href:"www.baidu.com"},
            {name:"腾讯", href:"www.baidu.com"}
        ];

        my$("btn").onclick = function() {
            // 创建table标签,并添加到div中
            var tableObj = document.createElement("table");
            tableObj.border = "1";
            tableObj.cellSpacing = "0";
            tableObj.cellPadding = "0";
            my$("dv").appendChild(tableObj);

            // 创建tr标签,添加到table中
            for(var i=0; i<arr.length; i++) {
                var trObj = document.createElement("tr");
                tableObj.appendChild(trObj);
                // 添加第一列
                var tdObj1 = document.createElement("td");
                tdObj1.innerHTML = arr[i].name;
                trObj.appendChild(tdObj1);
                // 添加第二列
                var tdObj2 = document.createElement("td");
                tdObj2.innerHTML = "<a href="+arr[i].href+">"+arr[i].name+"</a>";
                trObj.appendChild(tdObj2);
            }
        };
    </script>
</body>

tableObj.border = "1"; 不能使用 tableObj.style.border = "1px solid red"; 这样的话,只有table有边框,而 tr 没边框。所以 js 中,table 标签有自带的 border 属性可以设置边框,注意不需要 px。

2、其他操作元素的方法

<body>
    <input type="button" value="添加一个按钮1" id="btn1">
    <input type="button" value="添加一个按钮2" id="btn2">
    <input type="button" value="删除第一个按钮" id="btn3">
    <input type="button" value="删除所有按钮" id="btn4">
    <div id="dv"></div>

    <script src="common.js"></script>
    <script>
        var count = 0;
        // 往后追加按钮
        my$("btn1").onclick = function() {
            count++;
            var btn = document.createElement("input");
            btn.type = "button";
            btn.value = "按钮" + count;
            my$("dv").appendChild(btn);
        };
        // 往前追加按钮
        my$("btn2").onclick = function() {
            count++;
            var btn = document.createElement("input");
            btn.type = "button";
            btn.value = "按钮" + count;
            my$("dv").insertBefore(btn, my$("dv").firstElementChild);
        };
        // 从第一个按钮开始删除一个按钮
        my$("btn3").onclick = function() {
            my$("dv").removeChild(my$("dv").firstElementChild);
        };
        // 删除所有按钮
        my$("btn4").onclick = function() {
            while(my$("dv").firstElementChild) {
                my$("dv").removeChild(my$("dv").firstElementChild);
            }
        };
    </script>
</body>

appendChild:追加 insertBefore: 在某个元素前添加 removeChild:删除元素

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、元素的创建
    • 1、元素创建的三种方式
      • 1.1、方式一
      • 1.2、方式二
      • 1.3、方式三
      • 2、其他操作元素的方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档