自定义属性,节点操作

Dom 树

思维导图

自定义属性

  1. 在页面暂时保存数据而不是数据库
  2. 规定自定义属性以data-开头,自定义属性
  3. h5新增获取 属性.dataset.(要获取的属性),必须以data开头
  4. 如果是list-index-name 使用新特性时获取采用驼峰命名法

节点操作

  1. 兄弟关系和父子关系,层次关系(node)
  2. nodeType(节点类型),nodeName(节点名称),nodeValue(节点值)
  3. 元素节点nodeType=1,属性为2,文本,空格换行等等为3
  4. 父亲节点 parentNode找不到父节点返回为 null,返回的是最近的父元素
  5. 孩子节点childNodes得到的所有节点包括元素节点文本节点等等,一般不使用childNodes,使用非标准的parentNode.children可获取所有的子元素
  6. firstchild/lastchild获取的是第一个节点文本节点或者元素节点
  7. firstElementChild/last返回的是第一个子元素节点(兼容性问题)

查看实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
</ul>
<script>
var ul = document.querySelector('ul');
var lis = ul.querySelectorAll('li');
console.log(ul.children);
console.log(ul.firstElementChild);
console.log(ul.children[0]);
console.log(ul.children[ul.children.length - 1]);
</script>

兄弟节点

  1. nextSibling下一个兄弟节点,nextElementSibling
  2. 和父亲节点类似,previousELementSibling上一个元素节点

添加节点

  1. node.appendChild(child)node父级 child是子级
  2. 创建元素节点 document.createElement(‘元素’)
  3. node.insertBefore(child,指定元素)

实例化操作

  1. 演示站点 【第一屏
  2. 大量使用节点,比如节点的增加与删除等等

删除节点

  1. 父元素.removeChild[索引号]
  2. disabled禁用按钮
  3. 阻止链接跳转,javascript:void(0);或者 javascript:;

复制节点

  1. 括号为空或者里面时false 浅拷贝,只复制标签不复制内容
  2. 括号里面为true,深拷贝,复制标签及其里面的内容

动态创建表格

  1. 使用双循环,类似于冒泡排序,一个循环控制行,一个循环控制列
  2. 使用for..in 遍历数组属性,属性值
  3. 巧妙使用删除节点实现整行或者整列删除

查看实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<style>
* {
padding: 0;
margin: 0;
}
table{
border: 1px solid #888;
border-bottom: 0;
border-right: 0;
border-radius: 5px;
overflow: hidden;
}
th,
td {
border-right: 1px solid #888;
border-bottom: 1px solid #888;
}
thead{
background-color: #ccc;
}
tbody{
text-align: center;
}
table {
width: 400px;
margin: 12.5rem auto;
}
</style>

<body>
<table cellspacing="0">
<thead>
<tr>
<th>name</th>
<th>subject</th>
<th>score</th>
<th>你好世界</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<script>
var dates = [{
name: 'G先生',
subject: 'java',
score: 100
},
{
name: 'Q先生',
subject: 'java',
score: 99
},
{
name: 'W先生',
subject: 'java',
score: 98
},
{
name: 'T先生',
subject: 'java',
score: 97
}];
console.log(dates.length);
var tbody = document.querySelector('tbody');
for(var i = 0;i<dates.length;i++){
var tr = document.createElement('tr');
tbody.appendChild(tr);
for(var k in dates[i]){
var td =document.createElement('td');
td.innerHTML = dates[i][k];
tr.appendChild(td);
}
var td = document.createElement('td');
td.innerHTML = '<a href="javascript:;">删除</a>'
tr.appendChild(td);
// 获取要点击得孩子节点,删除父元素,就需要找上级的上级
tr.children[tr.children.length - 1].onclick = function(){
tbody.removeChild(this.parentNode);
}
}
</script>

创建元素

  1. document.write(‘’),如果页面文档流加载完毕,在调用后页面重绘效果不好
  2. innerHTML 创建多个元素时效率会低一些(采取拼接字符串),采取数组时效率最高
  • arr.push(‘’) 在转换为arr.join(‘’)字符串
  1. document.createElement(‘’) 创建多个元素时效率较第二种高,使用数组转化时效率最高