HTML 5_CSS 3_JavaScript讲义(十二)- DOM编程

(1) 访问HTML元素

1.1 根据ID访问HTML元素

document.getElementById(idVal)

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 根据ID访问HTML元素 </title>
    <script type="text/javascript">
        var accessById = function()
        {
            alert(document.getElementById("a").innerHTML + "\n"
            + document.getElementById("b").value);
        }
    </script>
    </head>
<body>
    <div id="a">疯狂Java讲义</div>
    <textarea id="b" rows="3" cols='25'>轻量级Java EE企业应用实战
        </textarea>
    <input type="button" value="访问2个元素" onclick="accessById();"/>
</body>
</html>
根据ID访问HTML元素

1.2 利用节点关系访问HTML元素

parentNode 当前节点的父节点
previous 当前节点的前一个兄弟节点
nextSibling 当前节点的后一个兄弟节点
childNodes 当前节点的所有子节点
getElementsByTagName(tagName) 当前节点的具有指定标签名的所有子节点
firstChild 当前节点的第一个子节点
lastChild 当前节点的最后一个子节点

对于HTML页面而言,浏览器会将页面中的“空白” 也当成文本节点

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 根据节点关系访问HTML元素 </title>
    <style type="text/css">
        /* 定义改变背景色的CSS,表示被选中的项 */
        .selected {
            background-color:#66f
        }
    </style>
    </head>
    <body>
    <ol id="books">
        <li id="java">疯狂Java讲义</li>
        <li id="ssh">轻量级Java EE企业应用实战</li>
        <li id="ajax" class="selected">疯狂Ajax讲义</li>
        <li id="xml">疯狂XML讲义</li>
        <li id="ejb">经典Java EE企业应用实战</li>
        <li id="workflow">疯狂Android讲义</li>
    </ol>
    <input type="button" value="父节点"
        onclick="change(curTarget.parentNode);"/>
    <input type="button" value="第一个"
        onclick="change(curTarget.parentNode.firstChild.nextSibling);"/>
    <input type="button" value="上一个"
        onclick="change(curTarget.previousSibling.previousSibling);"/>
    <input type="button" value="下一个"
        onclick="change(curTarget.nextSibling.nextSibling);"/>
    <input type="button" value="最后一个"
        onclick="change(curTarget.parentNode.lastChild.previousSibling);"/>
    <script type="text/javascript">
        var curTarget = document.getElementById("ajax");
        var change = function(target)
        {
            alert(target.innerHTML);
        }
    </script>
</body>
</html>
image.png

1.3 访问表单控件

HTMLFormElement 访问表单控件有如下三种方法:

  • formObj.elements[index] : 返回表单中第index个表单控件
  • formObj.elements['elementName'] : 返回表单中id或name为elementName的表单控件
  • formObj.elementName: 返回表单中id或name为elementName的表单控件
<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 访问表单控件 </title>
</head>
<body>
    <form id="d" action="" method="get">
        <input name="user" type="text" /><br />
        <input name="pass" type="text" /><br />
        <select name="color">
            <option value="red">红色</option>
            <option value="blue">蓝色</option>
        </select><br />
        <input type="button" value="第一个" onclick=
            "alert(document.getElementById('d').elements[0].value);" />
        <input type="button" value="第二个" onclick=
            "alert(document.getElementById('d').elements['pass'].value);" />
        <input type="button" value="第三个"    onclick=
            "alert(document.getElementById('d').color.value);" />
    </form>
</body>
</html>
访问表单控件

1.4 访问列表框,下拉菜单的选项

select.options[index] 访问列表框,下拉菜单的第index+1个选项

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 访问列表项 </title>
</head>
<body>
    <select id="mySelect" name="mySelect" size="6">
        <option value="java">疯狂Java讲义</option>
        <option value="ssh">轻量级Java EE企业应用实战</option>
        <option value="ajax" selected>疯狂Ajax讲义</option>
        <option value="xml">疯狂XML讲义</option>
        <option value="ejb">经典Java EE企业应用实战</option>
        <option value="workflow">疯狂Android讲义</option>
    </select><br />
    <input type="button" value="第一个" onclick=
        "change(curTarget.options[0]);" />
    <input type="button" value="上一个"    onclick=
        "change(curTarget.options[curTarget.selectedIndex - 1]);" />
    <input type="button" value="下一个" onclick=
        "change(curTarget.options[curTarget.selectedIndex + 1]);" />
    <input type="button" value="最后一个" onclick=
        "change(curTarget.options[curTarget.length - 1]);" />
    <script type="text/javascript">
        var curTarget = document.getElementById("mySelect");
        var change = function(target)
        {
            alert(target.text);
        }
    </script>
</body>
</html>

1.5 访问表格子元素

caption 表格的标题对象
HTMLCollection rows 表格里的所有表格行

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 访问表格元素 </title>
</head>
<body>
    <table id="d" border="1">
    <caption>疯狂Java体系</caption>
        <tr>
            <td>疯狂Java讲义</td>
            <td>轻量级Java EE企业应用实战</td>
        </tr>
        <tr>
            <td>疯狂Ajax讲义</td>
            <td>经典Java EE企业应用实战</td>
        </tr>
        <tr>
            <td>疯狂XML讲义</td>
            <td>疯狂Android讲义</td>
        </tr>
    </table>
    <input type="button" value="表格标题" onclick=
        "alert(document.getElementById('d').caption.innerHTML);" />
    <input type="button" value="第一行、第一格" onclick=
        "alert(document.getElementById('d').rows[0].cells[0].innerHTML);" />
    <input type="button" value="第二行、第二格" onclick=
        "alert(document.getElementById('d').rows[1].cells[1].innerHTML);" />
    <input type="button" value="第三行、第二格" onclick=
        "alert(document.getElementById('d').rows[2].cells[1].innerHTML);" />
</body>
</html>
访问表格子元素

(2) 修改HTML元素

  • innerHTML 大部分HTML页面元素如<div>,<td>的呈现内容
  • value 表单控件如<input>,<textarea>的呈现内容
  • className
  • style
  • options[index]
<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 编辑表格值 </title>
</head>
<body>
    改变第<input id="row" type="text" size="2" />行,
    第<input id="cel" type="text" size="2" />列的值为:
    <input id="celVal" type="text" size="16" /><br />
    <input id="chg" type="button" value="改变" onclick="change();" />
    <table id="d" border="1">
        <tr>
            <td>疯狂Java讲义</td>
            <td>轻量级Java EE企业应用实战</td>
        </tr>
        <tr>
            <td>疯狂Ajax讲义</td>
            <td>经典Java EE企业应用实战</td>
        </tr>
        <tr>
            <td>疯狂XML讲义</td>
            <td>疯狂Android讲义</td>
        </tr>
    </table>
    <script type="text/javascript">
        var change = function()
        {
            var tb = document.getElementById("d");
            var row = document.getElementById("row").value ;
            row = parseInt(row);
            // 如果需要修改的行不是整数,弹出警告
            if(isNaN(row))
            {
                alert("您要修改的行必须是整数");
                return false;
            }
            var cel = document.getElementById("cel").value ;
            cel = parseInt(cel);
            // 如果需要修改的列不是整数,弹出警告 
            if(isNaN(cel))
            {
                alert("您要修改的列必须是整数");
                return false;
            }
            // 如果需要修改的行或者列超出了表格的行或列,弹出警告
            if (row > tb.rows.length || 
                cel > tb.rows.item(0).cells.length)
            {
                alert("要修改的单元格不在该表格内");
                return false;
            }
            //  修改单元格的值
            tb.rows.item(row - 1).cells.item(cel - 1).innerHTML
                = document.getElementById("celVal").value;
        }
    </script>
</body>
</html>
编辑表格第一行第一列的值

(3) 增加HTML 元素

3.1 创建或复制节点

document.createElement(Tag) 创建Tag标签对应的节点

<script type="text/javascript">
    // 创建一个新节点
    var a = document.createElement("div");
    // 使用警告对话框输出节点
    alert(a);
</script>
image.png

Node cloneNode(boolean deep) 复制当前节点。当deep为true时,表示在复制当前节点的同时,复制该节点的全部后代节点;当deep为false时,表示仅复制当前节点

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 复制节点 </title>
</head>
<body>
    <ul id = "d">
        <li>疯狂Java讲义</li>
    </ul>
    <script type="text/javascript">
        // 获取ID为d的节点
        var ul = document.getElementById("d");
        // 复制ul的第二个子节点(不复制当前节点的后代节点)
        var ajax = ul.firstChild.nextSibling.cloneNode(false);
        // 修改被复制的节点
        ajax.innerHTML = "疯狂Ajax讲义";
        // 将复制的节点添加到页面中
        ul.appendChild(ajax);
    </script>
</body>
</html>
image.png

3.2 添加节点

appendChild(Node newNode) 将newNode添加成当前节点的最后一个子节点
insertBefore(Node newNode,Node refNode) 在refNode节点之前插入newNode节点
replaceChild(Node newChild,Node oldChild) 将oldChild节点替换成newChild节点

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 复制节点 </title>
</head>
<body>
    <ul id = "d">
        <li>疯狂Java讲义</li>
    </ul>
    <script type="text/javascript">
        // 获取ID为d的节点
        var ul = document.getElementById("d");
        // 复制ul的第二个子节点(不复制当前节点的后代节点)
        var ajax = ul.firstChild.nextSibling.cloneNode(false);
        // 修改被复制的节点
        ajax.innerHTML = "疯狂Ajax讲义";
        // 将复制的节点添加到页面中
        ul.insertBefore(ajax , ul.firstChild);
    </script>
</body>
</html>
image.png

3.3 为列表框,下拉菜单添加选项

add(HTMLOptionElement option,HTMLOptionElement before) 在before选项之前添加option选项。如果option选项添加在最后,则将before指定为null即可

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 添加选项 </title>
</head>
<body id="test">
    <script type="text/javascript">
        // 创建<select.../>对象
        var a = document.createElement("select");
        // 为<select.../>对象增加10个选项
        for (var i = 0 ; i < 10 ; i++)
        {
            // 创建一个<option.../>元素
            var op = document.createElement("option");
            op.innerHTML = '新增的选项' + i;
            // 将新的选项添加到列表框的最后
            a.add(op , null);
        }
        // 设置列表框高度为5
        a.size = 5;
        // 将列表框增加成body元素的子节点
        document.getElementById("test").appendChild(a);
    </script>
</body>
</html>
image.png

使用Option构造器
new Option(text,value,defaultSelected,selected)

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 添加选项 </title>
</head>
<body id="test">
    <script type="text/javascript">
        // 创建<select.../>对象
        var a = document.createElement("select");
        // 为<select.../>对象增加10个选项
        for (var i = 0 ; i < 10 ; i++)
        {
            // 创建一个<option.../>元素
            var op = new Option('新增的选项' + i , i);
            // 直接为指定选项赋值
            a.options[i] = op;
        }
        // 设置列表框高度为5
        a.size = 5;
        // 将列表框增加成body元素的子节点
        document.getElementById("test").appendChild(a);
    </script>
</body>
</html>
image.png

3.4 动态添加表格内容

insertRow(index) 在index处插入一行
createCaption() 为表格创建标题
createTFoot()
createTHead()
insertCell(long index) 在index处创建一个单元格

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 添加表格 </title>
</head>
<body id="test">
    <script type="text/javascript">
        // 创建一个表格对象
        var a = document.createElement("table");
        // 设置表格的边框为1
        a.border=1;
        var caption = a.createCaption();
        caption.innerHTML = "表格标题";
        // 为表格循环插入5行
        for (var i = 0 ; i < 5 ; i++)
        {
            // 插入行
            var tr = a.insertRow(i);
            // 为每行循环插入7列
            for (var j = 0 ; j < 7 ; j++)
            {
                // 循环插入7列
                var td = tr.insertCell(j);
                // 设置每个单元格的内容
                td.innerHTML = "单元格内容 " + i + j;
            }
        }
        //将表格元素添加到HTML文档内
        document.getElementById("test").appendChild(a);
    </script>
</body>
</html>
image.png

(4) 删除HTML元素

4.1 删除节点

removeChild(oldNode) 删除oldNode子节点

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 删除子节点 </title>
</head>
<body id="test">
    <input id="add" type="button" value="增加" disabled
        onclick="add();"/>
    <input id="del" type="button" value="删除" 
        onclick="del();"/>
    <div id="target" style="width:240px; height:50px;
        border:1px solid black">被控制的目标元素
    </div>
    <script type="text/javascript">
        //获取body元素
        var body = document.getElementById("test");
        //获取被控制的目标元素
        var target = document.getElementById("target");
        var add = function()
        {
            // 添加目标元素
            body.appendChild(target);
            document.getElementById("add").disabled = "disabled";
            document.getElementById("del").disabled = "";
        }
        var del = function()
        {
            // 删除目标元素
            body.removeChild(target);
            document.getElementById("del").disabled = "disabled";
            document.getElementById("add").disabled = "";
        }
    </script>
</body>
</html>
image.png

4.2 删除列表框,下拉菜单的选项

remove(long index) 删除指定索引处的选项

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 删除列表项 </title>
</head>
<body>
    <input id="opValue" type="text"/>
    <input id="add" type="button" value="增加"
        onclick="add();"/>
    <input id="del" type="button" value="删除"
        onclick="del();"/><br />
    <select id="show" size="8" style="width:120px;">
    </select>
    <script type="text/javascript">
        var show = document.getElementById("show");
        // 增加下拉列表选项的函数
        var add = function()
        {
            // 以文本框的值创建一个<option.../>元素
            var op = new Option(document
                .getElementById('opValue').value);
            //增加选项
            show.options[show.options.length] = op;
        }
        var del = function()
        {
            // 如果有选项
            if(show.options.length > 0)
            {
                // 删除最后的一个选项
                show.remove(show.options.length - 1);
            }
        }
    </script>
</body>
</html>

或直接将指定选项赋值且null也可删除该选项

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 删除列表项 </title>
</head>
<body>
    <input id="opValue" type="text"/>
    <input id="add" type="button" value="增加"
        onclick="add();"/>
    <input id="del" type="button" value="删除"
        onclick="del();"/><br />
    <select id="show" size="8" style="width:120px;">
    </select>
    <script type="text/javascript">
        var show = document.getElementById("show");
        // 增加下拉列表选项的函数
        var add = function()
        {
            // 以文本框的值创建一个<option.../>元素
            var op = new Option(document
                .getElementById('opValue').value);
            //增加选项
            show.options[show.options.length] = op;
        }
        var del = function()
        {
            // 如果有选项
            if (show.options.length > 0)
            {
                // 删除最后的一个选项
                show.options[show.options.length - 1] = null;
            }
        }
    </script>
</body>
</html>
image.png

4.3 删除表格的行或单元格

deleteRow(long index) 删除表格中index索引处的行
deleteCell(long index) 删除某行index索引处的单元格

<!DOCTYPE html>
<html>
<head>
    <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 删除表格的行和格 </title>
</head>
<body>
<input id="delrow" type="button" value="删除表格最后一行"
    onclick="delrow();" /><br />
<input id="delcell" type="button" value="删除最后一行的最后一格"
    onclick="delcell();" /><br />
    <table id="test" border="1" style="width:400px;">
        <caption>疯狂Java体系</caption>
        <tr>
            <td>疯狂Java讲义</td>
            <td>轻量级Java EE企业应用实战</td>
        </tr>
        <tr>
            <td>疯狂Ajax讲义</td>
            <td>经典Java EE企业应用实战</td>
        </tr>
        <tr>
            <td>疯狂XML讲义</td>
            <td>疯狂Android讲义</td>
        </tr>
    </table>
    <script type="text/javascript">
        // 获取目标表格
        var tab = document.getElementById("test");
        // 删除行的函数
        var delrow = function()
        {
            if (tab.rows.length > 0)
            {
                // 删除最后一行
                tab.deleteRow(tab.rows.length - 1); 
            }
        }
        // 删除目标表格的最后一格
        var delcell = function()
        {
            // 获取表格的所有行
            var rowList = tab.rows;
            // 获取表格的最后一行
            var lastRow = rowList.item(rowList.length - 1);
            if(lastRow.cells.length > 0)
            {
                // 删除表格的最后一格
                lastRow.deleteCell(lastRow.cells.length - 1);
            }
        }
    </script>
</body>
</html>
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 2,752评论 0 8
  • 本章内容 理解包含不同层次节点的 DOM 使用不同的节点类型 克服浏览器兼容性问题及各种陷阱 DOM 是针对 HT...
    闷油瓶小张阅读 623评论 0 1
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,725评论 1 92
  • 最近在学习javascript关于DOM的一些知识,在这里对DOM做一些总结。 1.DOM简介 DOM是W3C的标...
    风之郁少阅读 368评论 0 5
  • 文|东东 周末早上看到朋友状态,说如今读三毛的文字,除了喜欢,更多是有很大的共鸣,所以忍不住看第二遍,第三遍。 我...
    郝东东阅读 706评论 0 3