DOM第五讲


表格在页面中的一些体现

实现效果:行颜色间隔显示并高亮

<table>

<tr>

<th>姓名</th>

<th>年龄</th>

<th>地址</th>

</tr>

<tr>

<td>张三</td>

<td>27</td>

<td>上海</td>

</tr>

<tr>

<td>张三</td>

<td>27</td>

<td>上海</td>

</tr>

<tr>

<td>张三</td>

<td>27</td>

<td>上海</td>

</tr>

 

 

</table>

 

写一个样式表,为表格,行,添加样式

table.css

table{

border:#249bdb 1px solid;

width:500px;

border-collapse:collapse;

}

table td{

border:#249bdb 1px solid;

paddding:10px;

}

table th{

border:#249bdb 1px solid;

paddding:10px;

background-color:rgb(200,200,200);

}

 

定义两个类选择器,使得相邻两行的背景不同,以示区分

<script type=text/javascript>

function trColor(){

//思路:

因为要操作行的样式,所以要先获取表格对象,

然后获取所有被操作的行对象

遍历行并给每一行指定样式

var oTabNode=docummnet.getElementById(info);

//获取表格中的所有行

var collTrNodes=oTabNode.rows;

//遍历的时候从第二行开始

for(var x=1;x<collTrNodes.length;x++)

{

if(x%2==1)

{

collTrNodes[x].className=one;

}

else

{

collTrNodes[x].className=two;

}

}

 

}

 

onload=function(0

{

trColor();

};

</script>

 

这样做完之后,怎么样实现高亮效果呢?就是当鼠标移到每一行上时,发亮,移出时,恢复原状

 

这就需要为没一行对象添加两个事件

在上面的for语句中

 

collTrNodes[x].onmouseover=function(){

name=this.className;//记录下每行的原状态,以便恢复

this.className=over;

}

collTrNodes[x].onmuseout=function(){

this.className=name;

}

 

<style type=text/css>

.one{

background-color:#e1e16a;

}

.two{

background-color:#75f094;

}

.over{

background-color:#8deffa;

}

</style>

 

三、表格排序

 

<th><a href=javascript:void(0) onclick=sortTable()>年龄</a></th>

<a>标签设定属性

<style type=text/css>

th a:link,th a:visited{

color:#279bda;

text-decoration:none;//去掉超链接的下划线

}

</style>

 

<script type=text/javascript>

function sortTable()

{

//思路:

1、排序就需要数组,获取需要参与排序的行对象数组

2、对行数组中的每一个行的年龄单元格的数据进行比较,并完成行对象在数组中的位置置换

3、将排好序的数组重新添加回表格

 

//首先得到table节点(tableidinfo)

var oTabNode=document.getElementById(info);

var collTrNodes=oTabNode.rows;

//定义一个临时容器,存贮需要排序的行对象

var trArr=[];

//遍历原行集合,并将需要排序的行对象存储到容器中

for(var x=1;x<collTrNodes.length;x++)

{

trArr[x-1]=collTrNodes[x];

}

//对临时容器排个序

mySort(trArr);

//将排完序的行对象添加进表格

for(var x=0;x<trArr.length;x++)

{

trArr[x].parentNode.appendChild(trArr[x]);

}

 

 

function mySort(arr)

{

for(var x=0;x<arr.length;x++)

{

for(var y=x+1;y<ar.length;y++)

{

if(parseInt(arr[x].cells[1].innerHTML)>parseInt(arr[y].cells[1].innerHTML))

{

var temp=arr[x];

arr[x]=arr[y];

arr[y]=temp;

}

}

}

}

 

}

</script>

 

四、全选商品列表

 

<input type=checkbox name=item value=4000/>笔记本电脑,3000</br>

<input type=checkbox name=item value=4000/>笔记本电脑,3000</br>

<input type=checkbox name=item value=4000/>笔记本电脑,3000</br>

<input type=checkbox name=item value=4000/>笔记本电脑,3000</br>

<input type=checkbox name=item value=4000/>笔记本电脑,3000</br>

 

<input type=button value=总金额 onclick=getSum()>

<span id=sumid />

 

<script type=text/javascript>

function getSum()

{

//获取所有名称为item的复选框,判断checked状态,为true表示被选中,获取该节点的value进行累计

var sum=0;

var collItemNodes=document.getElementsByName(item);

for(var x=0;x<collItemNodes.length;x++)

{

if(collItemNodes[x]checked)

{

sum+=parseInt(collItemNodes[x].value);

}

}

documet.getElementById(sumid).innerHTML=sum;

}

</script>

 

弄个全选

<input type=checkbox name=allitem onclick=checkAll(this)/>全选

 

function checkAll(node)

{

//原理,将allitem的状态赋值给所有的item的状态

var collItemNodes=document.getElementsByName(item);

For(var x=0;x<collItemNodes.length;x++)

{

collItemNodes[x].checked=node.checked;

}

 

} 

<think>好的,用户让我前端DOM。首先,我需要确定用户的基础,可能他们刚接触前端开发,或者想巩固知识。DOM是文档对象模型,核心是操作网页结构和内容,但怎么解释才能让用户理解呢? 应该从DOM的定义开始,说明它如何将HTML转换为树状结构。然后提到节点类型,比如元素节点、文本节点,这有助于用户理解DOM的组成。接下来,事件处理和动态操作是关键,要举例说明,比如点击事件改变样式。 用户可能想知道DOM和HTML的区别,这部分需要区分清楚,强调DOM是动态的而HTML是静态的。然后,性能优化方面,重排和重绘的问题,以及如何减少操作,比如使用文档片段。这部分对实际开发很重要。 还要补充现代框架如何处理DOM,比如虚拟DOM的优势,这样用户能了解实际应用中的优化方法。最后,列举常用API,让用户有具体的参考。整个过程中,要确保例子清晰,语言通俗,避免太技术化的术语,让初学者也能跟上。</think>好的,我将从基础概念到实际应用逐步为你解前端DOM: 1. **DOM的定义** $$文档对象模型(Document Object Model)$$ - 是HTML/XML文档的编程接口 - 将文档解析为树形结构(节点树) - 通过JavaScript可以动态访问和修改这个结构 2. **DOM树结构示例** 对于这个HTML: ```html <html> <head> <title>页面标题</title> </head> <body> <h1>我的第一个标题</h1> <p>我的第一个段落</p> </body> </html> ``` 对应的DOM树为: ``` document ├─ html │ ├─ head │ │ └─ title │ │ └─ "页面标题" │ └─ body │ ├─ h1 │ │ └─ "我的第一个标题" │ └─ p │ └─ "我的第一个段落" ``` 3. **关键特性** - **节点类型**: - 元素节点(如`<div>`) - 文本节点(如文字内容) - 属性节点(如`class="box"`) - 注释节点等 - **核心API**: ```javascript document.getElementById('id') // 精准定位 element.querySelector('.class') // CSS选择器 parentNode.appendChild(newNode) // 添加子节点 element.setAttribute('href', '#') // 修改属性 ``` 4. **事件处理机制** ```javascript const btn = document.querySelector('button'); btn.addEventListener('click', function() { this.style.backgroundColor = 'blue'; // 动态样式修改 }); ``` 5. **性能优化要点** - 避免频繁的DOM操作(推荐批量更新) - 使用`document.createDocumentFragment()`临时容器 - 注意重排(reflow)和重绘(repaint)的触发条件 6. **现代框架中的DOM处理** - React使用虚拟DOM(Virtual DOM)进行差异对比 - Vue通过响应式系统自动更新DOM - 这些优化方案都是基于原生DOM的封装 7. **DOM与HTML的区别** | HTML(静态) | DOM(动态) | |---------------------|---------------------| | 文本标记语言 | 内存中的对象模型 | | 描述页面初始状态 | 实时反映当前状态 | | 无法直接交互 | 支持编程操作 | 掌握DOM操作是前端开发的基础核心技能,建议通过Chrome开发者工具的Elements面板实时观察DOM变化,结合JavaScript进行实践练习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值