• 记录我的旅程4之JavaScript Dom学习笔记


    好长时间有没有写博客了,从今天起我的博客之路继续了,嘿嘿下面我们接着旅程3继续我们的Dom征程4,这篇博文讲的是Dom的动态创建。

    1. Dom的动态创建

    (1) document.write只能在页面加载过程中才能动态创建

    (2) 可以调用document的createElement方法来创建具有指定标签的Dom对象,然后通过调用某个元素的appendChild方法将新创建的元素添加到相应的元素下。

        <script type="text/javascript">

            function btnClick() {

                var divMain = document.getElementById("divMain");  //获得层

                var input = document.createElement("input"); 

                input.value = "我的动态按钮";

                input.type = "button";

                divMain.appendChild(input);  //将产生的元素添加到divMain层

            }

        </script>

    <body>

        <div id="divMain"></div>

        <input type="button" value="点击" onclick="btnClick()" />

    </body>

    (3)innerText,innerHTML

     1) 几乎所有的Dom元素都有innerText,innerHTML属性(注意大小写),分别是元素标签内容的文本表示形式和HTML源代码,这两个属性是可读可写的。

      <a href="http://www.baidu.com" id="link1">百<font color="red">度</font></a>

        <input type="button" value="inner" onclick="alert(document.getElementById('link1').innerText);alert(document.getElementById('link1').innerHTML);" />

        <input type="button" value="innerText" onclick="document.getElementById('link1').innerText='百度'" />

        <input type="button" value="innerHTML" onclick="document.getElementById('link1').innerHTML='<font color='Yellow'>博客园</font>'" />

     2) 用innerHTML也可以替代createElement,属于简单粗放型。

        <script type="text/javascript">

            function createInput() {

                var divMain = document.getElementById("divMain");

                divMain.innerHTML = "<input type='button' value='按钮' />";

            }

        </script>

        <div id="divMain"></div>

        <input type="button" value="动态创建" onclick="createInput()" />

    注释:这个动态创建按钮只能创建一个按钮,不能重复的创建。

    练习1:点击按钮增加一个网站的超链接

        <script type="text/javascript">

            function createLink() {

                var divMianLink = document.getElementById("divMainlink");

                var link = document.createElement("a");

                link.href = "http://www.cnblogs.com";

                link.innerText = "百度  ";

                divMainlink.appendChild(link);

            }

        </script>

        <div id="divMainlink"></div>

        <input type="button" value="产生" onclick="createLink()" />

    练习2:点击按钮动态增加网站列表,分两列,第一列为网站的名字,第二列为带网站超链接的的网站名,增加三行常见网站。

        <script type="text/javascript">

            function loadData() {

                var data = { "百度": "http://www.baidu.com", "博客园": "http://www.cnblogs.com", "新浪": "http://www.sina.com" };

                var tableLinks = document.getElementById("tableLinks");

                for (var key in data) {

                    var value = data[key];

                    var tr = document.createElement("tr");

                    var td1 = document.createElement("td");  //先创建td,放入内容,在加入tr

                    td1.innerText = key;

                    tr.appendChild(td1);

                    var td2 = document.createElement("td");

                    td2.innerHTML = "<a href='" + value + "'>" + value + "</a>";

                    tr.appendChild(td2);

                    tableLinks.appendChild(tr);

                }

            }

        </script>

        <table id="tableLinks"></table>

    <input type="button" value="加载" onclick="loadData()" />

    注释:动态产生的元素,查看源代码是看不到的,通过F12开发人员工具或者DebugDar—>Dom—>文档—>HTML可以看到。

    注释:浏览器兼容性的例子,ie6,ie7不支持table.appendChild(“tr”).

    详注:浏览器兼容新问题

    (1) 浏览器兼容性的例子,ie6,ie7对table.appendChild(“tr”)的支持和IE8不一样,用insertRow,insertCell来代替或者为表格添加tbody,然后向tbody中添加tr,FF不支持innerText。所以动态加载网站的列表程序修改为:

        var tr = tableLinks2.insertRow(-1);

        var td1 = tr.insertCell(-1);

        td1.innerText = key;

        var td2 = tr.insertCell(-1);

        td2.innerHTML = "<a href='" + value + "'>" + value + "</a>";

    或者<table id=”tableLinks”>

                  <tbody></tbody>     </table>

    然后tableLinks.tBodies[0].appendChild(tr);

    重写上述案例:代码如下

            function loadData1() {

                var data = { "百度": "http://www.baidu.com", "博客园": "http://www.cnblogs.com", "新浪": "http://www.sina.com" };

                var tableLinks = document.getElementById("tableLinks2");

                for (var key in data) {

                    var value = data[key];

                    var tr = tableLinks2.insertRow(-1);

                    var td1 = tr.insertCell(-1);

                    td1.innerText = key;

                    var td2 = tr.insertCell(-1);

                    td2.innerHTML = "<a href='" + value + "'>" + value + "</a>";

                }

            }

        <table id="tableLinks2"></table>

        <input type="button" value="兼容IE6,7加载" onclick="loadData1()" />

     

    练习3:练习点评无刷新评论。

        <script type="text/javascript">

            function addComment() {

                var nickname = document.getElementById("nickname").value;

                var comment = document.getElementById("comment").value;

                var tableComment = document.getElementById("tableComment");

                var tr = document.createElement("tr");

                var tdnickName = document.createElement("td");

                tdnickName.innerText = nickname;

                tr.appendChild(tdnickName);

                var tdCommnent = document.createElement("td");

                tdCommnent.innerText = comment;

                tr.appendChild(tdCommnent);

                tableComment.tbodies[0].appendChild(tr);

            }

        </script>

        <p>评论区</p>

        <table id="tableComment">

            <tbody> </tbody>

        </table>

        昵称:<input type="text" id="nickname" /><br />

        内容:<textarea id="comment"></textarea><br />

        <input type="button" value="评论" onclick="addComment()" />

  • 相关阅读:
    Tina系统的安装
    检查有无相机的权限
    BarEasy打印小程序_CS
    js的websocket
    生成GUID
    读取excel数据到数据库里
    字符串trim
    使用 runOnUiThread在线程内更新UI
    PdfDocument生成PDF,总是产生空文件
    打印36进制的条码序列号
  • 原文地址:https://www.cnblogs.com/hanyinglong/p/2578958.html
Copyright © 2020-2023  润新知