javascript操作dom对象

Posted 颢Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript操作dom对象相关的知识,希望对你有一定的参考价值。

什么叫DOM?

DOM是文档对象模型(Document Object Model,是基于浏览器编程(在本教程中,可以说就是Dhtml编程)的一套API接口,W3C出台的推荐标准,每个浏览器都有一些细微的差别,其中以Mozilla的浏览器最与标准接近。

DOM属于浏览器,而不是javascript语言规范里的规定的核心内容。

 

 

查找元素

1、直接查找

 

方法名 描述
getElementById(id) (document) 获取有指定惟一ID属性值文档中的元素
getElementsByTagName_r(name) 返回当前元素中有指定标记名的子元素的数组
document.getElementsByClassName 根据属性获取标签集合
getAttribute(name) 返回元素的属性值,属性由name指定

 

1>document.getElementById(\'id\')

1
2
3
4
5
6
7
8
9
10
<body>
 <div id="zhang">
 不帅
 </div>
  
 <script type="text/javascript">
 var i = document.getElementById(\'zhang\'); //查找指定的id
 i.innerText = \'很帅\'; //innerText修改指定的字符串
 </script>
</body>

显示效果,当我们打开IE的时候不帅就会被修改为很帅

2>getElementsByTagName_r(name)

1
2
3
4
5
6
7
8
9
10
<body>
 <div name="zhang">
 不帅
 </div>
  
 <script type="text/javascript">
 var i = document.getElementByTagNmae(\'zhang\'); //查找指定的name名
 i.innerText = \'很帅\'; //innerText修改指定的字符串
 </script>
</body>

其显示效果一样

3>document.getElementsByClassName

1
2
3
4
5
6
7
8
9
10
<body>
 <div class="zhang">
 不帅
 </div>
  
 <script type="text/javascript">
 var i = document.getElementClassName(\'zhang\'); //查找指定的class名
 i.innerText = \'很帅\'; //innerText修改指定的字符串
 </script>
</body>

2、间接查找

 

属性名 描述
childNodes 返回当前元素所有子元素的数组
childNodes 返回当前元素的所有子元素
firstChild 返回当前元素的第一个下级子元素
lastChild 返回当前元素的最后一个子元素
nextSibling 返回紧跟在当前元素后面的元素
previousSibling 返回紧跟在当前元素前面的元素
parentElement 返回其父节点标签元素
children 返回其所有子标签
firstElementChild 返回第一个子标签元素
lastElementChild 返回最后一个子标签元素
nextElementtSibling 返回下一个兄弟标签元素
previousElementSibling 返回上一个兄弟标签元素

 

利用XML的强大功能和灵活性,将XML作为浏览器和服务器之间的通信介质。

操作元素

1、动态创建内容时所用的W3C DOM属性和方法

 

属性/方法 描述
document.createElement_x(tagName) 文档对象上的createElement_x方法可以创建由tagName指定的元素。如果以串div作为方法参数,就会生成一个div元素
document.createTextNode(text) 文档对象的createTextNode方法会创建一个包含静态文本的节点
<element>.appendChild(childNode) appendChild方法将指定的节点增加到当前元素的子节点列表(作为一个新的子节点)。
<element>.setAttribute(name, value) 这些方法分别获得和设置元素中name属性的值
<element>.insertBefore(newNode, targetNode) 将节点newNode作为当前元素的子节点插到targetNode元素前面
<element>.removeAttribute(name) 这个方法从元素中删除属性name
<element>.removeChild(childNode) 这个方法从元素中删除子元素childNode
<element>.replaceChild(newNode, oldNode) 这个方法将节点oldNode替换为节点newNode
<element>.hasChildnodes() 这个方法返回一个布尔值,指示元素是否有子元素

 

2、标签内容

1
2
3
innerText  获取标签文本内容
innerHTML  获取HTML内容
value   获取值,即form提交表单的值

即实例如下:

1
2
3
4
5
6
7
8
<div class="zhang">1111</div>
<div class="yan">2222</div>
<input class="lin" type="text" value="张岩林">
<script>
 document.getElementsByClassName("zhang").innertext = 123; // 获取类名为zhang的标签并把内容改为123
 document.getElementsByClassName("yan").innerHTML = 456; //获取类名为yan的标签并把内容改为456
 document.getElementsByClassName("lin").value = "张岩林很帅"; //获取类名为lin的标签并把内容改为张岩林很帅
</script>

3、属性

1
2
3
attributes     // 获取所有标签属性
setAttribute(key,value)   // 设置标签属性
getAttribute(key)    // 获取指定标签属性

通过自定义属性可以做一个全选,反选,取消选择的案例,代码如下:

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
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<div>
 <input type="button" value="全选" onclick="Checkall();">
 <input type="button" value="取消" onclick="Cancleall();">
 <input type="button" value="反选" onclick="recvall();">
</div>
<div id = "i1">
 <ul>
 <li><input type="checkbox" value="1" class="c1">篮球</li>
 <li><input type="checkbox" value="2" class="c1">足球</li>
 <li><input type="checkbox" value="3" class="c1">排球</li>
 </ul>
</div>
<script>
 function Checkall() {
 var b = document.getElementsByClassName("c1");
 for (var i = 0 ;i < b.length;i++){
  var check = b[i];
  check.checked = true
 }
 }
 function Cancleall() {
 var b = document.getElementsByClassName("c1");
 for (var i = 0 ;i < b.length;i++){
  var check = b[i];
  check.checked = false
 }
 }
 function recvall() {
 var b = document.getElementsByClassName("c1");
 for (var i = 0 ;i < b.length;i++){
  var check = b[i];
  if (check.checked){
  check.checked = false
  }else {
  check.checked = true
  }
 }
 }
 
 
</script>
 
</body>
</html>
全选、反选、取消案例

注:onclick是属于点击事件,后面会提到

4、class操作

1
2
3
className   // 获取所有类名
classList.remove(cls) // 删除指定类
classList.add(cls)  // 添加类

当我们鼠标放到全部商品的时候,下面就出现好多商品,其商品是属于隐藏的,触发事件以后他才显示出来,其中间的操作就是定义了一个css隐藏属性,鼠标放上去后,移除CSS隐藏属性;鼠标移走又把隐藏属性给添加上去。

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
<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title>隐藏</title>
 <style>
 .hide{
  display: none;
 }
 </style>
</head>
<body>
 
<span onmouseover="mouOver();" onmouseout="mouOut();">放这上面有东西出来,不放东西又消失</span>
<div class="hide" id = "zhangyanlin" style="font-size: 60px">张岩林好帅</div>
<script>
 function mouOver() {
 document.getElementById("zhangyanlin").classList.remove("hide");
 }
 function mouOut() {
 document.getElementById("zhangyanlin").classList.add("hide");
 }
</script>
</body>
</html>
来个案例醒醒脑

5、标签操作

dom创建标签,添加到指定位置

 
 
1
2
3
4
5
6
7
8
9
10
11
// 方式一
var zhang = "<input type=\'text\' />";
xxx.insertAdjacentHTML("beforeEnd",zhang);
xxx.insertAdjacentElement(\'afterBegin\',document.createElement(\'a\'))
  
//注意:第一个参数只能是\'beforeBegin\'、 \'afterBegin\'、 \'beforeEnd\'、 \'afterEnd\'
  
// 方式二
var tag = document.createElement(\'div\')
xxx.appendChild(tag)  //往后追加一个div元素
xxx.insertBefore(tag,xxx[1]) //插到指定位置,可根据索引

 

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
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
 <div>
 <div>
  <input type="text" />
  <input type="button" value="添加" onclick="AddElement(this);" />
 </div>
 <div style="position: relative;">
  <ul id="commentList">
  <li>alex</li>
  <li>eric</li>
  </ul>
 </div>
 </div>
 <script>
 function AddElement(ths) {
  // 获取输入的值
  var val = ths.previousElementSibling.value;
  ths.previousElementSibling.value = "";
  var commentList = document.getElementById(\'commentList\');
  //第一种形式,字符串方式
  //var str = "<li>" + val + "</li>";
  // \'beforeBegin\'、 \'afterBegin\'、 \'beforeEnd\'、 \'afterEnd\'
  // beforeEnd内部最后
  // beforeBegin 外部上边
  //afterBegin 内部贴身
  //afterEnd 外部贴墙
  //commentList.insertAdjacentHTML("beforeEnd",str);
  //第二种方式,元素的方式
  var tag = document.createElement(\'li\');
  tag.innerText = val;
  var temp = document.createElement(\'a\');
  temp.innerText = \'百度\';
  temp.href = "http://etiantian.org";
  tag.appendChild(temp);
  // commentList.appendChild(tag);
  commentList.insertBefore(tag,commentList.children[1]);
 }
 </script>
</body>
</html>
添加标签操作案例

6、样式操作

1
2
3
4
5
6
7
8
<body>
<div id = i1>张岩林很帅</div>
<script>
var obj = document.getElementById(\'i1\');
obj.style.fontSize = "32px";
obj.style.backgroundColor = "red";
</script>
</body>

效果如下:

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
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <style>
 .bb{
  color: #9a9a9a;
 }
 .aa{
  color: black;
 }
 </style>
</head>
<body>
 <input class="bb" value="请输入内容" onfocus="inpAtu(this);" onblur="onBtu(this);">
 <script>
 function inpAtu(ths) {
  ths.className = "aa";
  var text = ths.value;
  if (text == "请输入内容"){
  ths.value = "";
  }
 }
 function onBtu(ths) {
  var text = ths.value;
  if (text == "请输入内容" || text.trim().length == 0){
  ths.className = "bb";
  ths.value = "请输入内容";
  }
 }
 </script>
</body>
</html>
input输入框提示

7、位置操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
总文档高度
document.documentElement.offsetHeight
  
当前文档占屏幕高度
document.documentElement.clientHeight
  
自身高度
tag.offsetHeight
  
距离上级定位高度
tag.offsetTop
  
父定位标签
tag.offsetParent
  
滚动高度
tag.scrollTop

网页右下角有个返回顶部,一点就返回到上面了,其实就是计算这些高度;还有当你鼠标往下拉的时候,左边菜单栏相对应的样式都会变。

 
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

(c)2006-2024 SYSTEM All Rights Reserved IT常识