JavaScript DOM编程实战:二级联动菜单与邮件列表管理

作者:小圆点时间:2026-10-25 01:22:49浏览:476

本文通过两个经典JavaScript DOM编程实例,详细讲解如何利用DOM API实现动态交互功能。第一个示例演示如何通过二维数组和onchange事件构建省份与城市的二级联动下拉菜单;第二个示例则深入解析邮件列表的管理逻辑,包括利用CSS类名实现隔行变色与鼠标悬停高亮、全选/反选复选框逻辑,以及基于节点引用的安全删除功能。代码涵盖元素创建、属性修改及事件绑定等核心DOM操作技巧。

JavaScript DOM编程实战:二级联动菜单与邮件列表管理

本文分享了关于学习DOM(文档对象模型)的有效方法,内容详实,对读者理解DOM编程具有显著的启发意义。


接下来,我们将重点介绍几个具有代表性的DOM应用案例,供读者参考与实践。


二级联动下拉菜单实现

案例一:实现二级联动下拉菜单(一级选项为省份,二级选项为城市,要求当用户选择特定省份时,城市列表自动更新以显示对应城市)。


实现步骤:1)构建基础HTML框架:页面包含两个下拉选择框,初始状态下第二个下拉框为空。第一个下拉框作为事件源,通过绑定onchange事件来触发JavaScript逻辑。


具体HTML代码如下:

 
<xmp>
<select id="province" onchange="selCity()">
<option >--选择省份--</option>
<option >北京</option>
<option >天津</option>
<option >湖北</option>
<option >山东</option>
<option >河北</option>
</select>
<select id="city">
<option>--选择城市--</option>
</select>
</xmp>

2)页面样式修饰:无需复杂设计,确保下拉菜单正常显示即可。


3)JavaScript功能实现:为了实现省份与城市的一对多映射关系,虽然JavaScript原生不支持Map集合,但我们可以利用二维数组来存储数据并实现联动逻辑。


JavaScript实现代码如下:

 
<script type="text/javascript">
function selCity()
{ 
var arr= [["--选择城市--"],["海淀区","朝阳区","东城区","西城区","宣武区"],
["和平区","河北区","河东区","河西区","南开区"],
["武汉","宜昌","孝感","襄樊","荆州"],
["济南","青岛","烟台","威海","日照"],
["石家庄","保定","张家口","廊坊","邯郸"]];
var selpNode = document.getElementById("province");
var selcNode = document.getElementById("city");
var citys = arr[selpNode.selectedIndex];
selcNode.options.length = 0;
for(var x=0; x<citys.length; x++)
{ 
var optNode = document.createElement("option");
optNode.innerText = citys[x];
selcNode.appendChild(optNode);
} 
} 
</script>

关键点总结:在每次更新城市列表前,务必清空原有选项,以避免数据累积。


邮件列表管理功能

案例二:邮件列表管理功能。


设计思路:1)整体布局采用表格结构进行格式化,通过操作表格节点、行节点及单元格节点来实现交互功能。


2)CSS样式主要用于表格格式化,以及实现选中状态和隔行显示不同背景色的效果,通过动态修改元素的className属性来切换样式。


受篇幅限制,HTML结构与CSS样式代码较为简单,此处不再赘述。


3)核心功能由JavaScript实现,具体代码如下:


JavaScript代码实现如下:

 
<script>
var color ="";
function getStyle()
{ 
var tableNode =document.getElementsByTagName("table")[0];
var arr = tableNode.rows;
for(var x = 0;x<arr.length;x++)
{ 
if(x%2)
arr[x].className = "one";
else
arr[x].className = "two";
var tdNode0 = arr[x].cells[0];
tdNode0.align = "center";
arr[x].onmouseover = function()
{ 
color = this.className;//将原有的值记录,以便鼠标离开后能恢复原来的颜色
this.className = "checked";
} 
arr[x].onmouseout = function()
{ 
this.className = color;
} 
} 
} 
//为了实现全选功能,我们通过传递参数来区分操作对象
function allCheck(index)
{ 
var allNode = document.getElementsByName("all")[index];
var checkNodes = document.getElementsByName("mail");
for(var x=0;x<checkNodes.length;x++)
{ 
checkNodes[x].checked = allNode.checked;
} 
} 
function checkBut(num)
{ 
var mailNodes = document.getElementsByName("mail");
for(var x=0; x<mailNodes.length; x++)
{ 
if(num>1)
mailNodes[x].checked = !(mailNodes[x].checked);//将当前状态取反并赋值,实现反选功能
else
mailNodes[x].checked = num;
} 
} 
function del()
{ 
var b = window.confirm("确定要删除所选邮件吗?");
if(!b)
return ;
var mailNodes = document.getElementsByName("mail");
var arr = new Array();
var pos = 0;
for(var x=0; x<mailNodes.length; x++)
{ 
if(mailNodes[x].checked)
{ 
var trNode = mailNodes[x].parentNode.parentNode;
arr[pos++] = trNode;
} 
} 
for(var x=0; x<arr.length; x++)
{ 
arr[x].parentNode.removeChild(arr[x]);
} 
getStyle();
} 
window.onload = getStyle;
</script>
作者最新文章