一个程序员的自我修养
Delphi象吉普车,什么路上都能开,却在啥路上也开不好;PB就象卡丁车,只能在固定线路上开,到室外就有些不稳;VC象跑车,你开得起却买不起,而且一旦发生故障,想修都找不到毛病在哪;Java象敞棚车,不管刮风下雨还是艳阳高照,都能照开不误;VB就是摩托车,骑的时间越长,你越痛恨它!

一、DOM的概念

DOM(Document Object Model)文档对象模型
DOM是W3C(万维网联盟)定义的关于访问HTML和XML文档的标准

W3CDOM标准分为3部分:
核心 DOM - 针对任何结构化文档的标准模型
XML DOM - 针对 XML 文档的标准模型
HTML DOM - 针对 HTML 文档的标准模型

【说明】HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准,即操作HTML的元素

二、DOM的节点分类

根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:

  • 整个文档是一个文档节点
  • 每个 HTML 元素是元素节点
  • HTML 元素内的文本是文本节点
  • 每个 HTML 属性是属性节点
  • 注释是注释节点

节点树中的节点彼此拥有层级关系。

  • 父(parent)节点:父节点拥有任意数量的子节点
  • 子(child)节点:子节点拥有一个父节点
  • 兄弟(sibling)节点:同级的子节点被称为同胞(兄弟或姐妹)。同胞是拥有相同父节点的节点
  • 根(root)节点:在节点树中,顶端节点被称为根(root)   根节点没有父节点

三、DOM中获取节点的方法

1、获取元素节点

  • getElementById() 
    根据元素id获取元素节点

  • getElementsByTagName()
    根据标签名称获取元素节点注意:返回值是集合

  • getElementsByClassName()  
    获取相同class属性的节点列表( IE8及以下不支持)

  • getElementsByName()
    获取相同名称的节点列表 
    注意:  不是所有标签都有name属性(form 表单元素有) 某些低版本浏览器会有兼容性问题

  • querySelector()  
    找到符合该选择器的第一个元素

  • querySelectorAll()  
    找到符合该选择器的所有元素

<!doctype html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title></title>
	</head>
	<body>
		<div id="first">1</div>
		<div class="box">2</div>
		<div class="box">3</div>
		<div class="box">4</div>
		<input type="checkbox" name="sex" />男
		<input type="checkbox" name="sex" />女
        <p>第一个p
			<span>第一个span</span>
		</p>
        <p>第二个p
			<span>第二个span</span>
		</p>
		<script type="text/javascript">
			
			//1.通过id获取元素
			var aDiv1 = document.getElementById("first");
			console.log(aDiv1);
			//2.通过标签名获取元素
			var aDiv2 = document.getElementsByTagName("div");
			console.log(aDiv2);
			//3.通过class来获取 在IE8以下的浏览器无法获取
			var aDiv3 = document.getElementsByClassName("box");
			console.log(aDiv3);
			//4.通过name来获取元素节点
			var aCheckBox = document.getElementsByName("sex");
			console.log(aCheckBox);
			//5.找到符合该选择器的第一个元素
			var arr = document.querySelector('p span');
			console.log(arr);
			//5.找到符合该选择器的所有元素
			arr = document.querySelectorAll('p span');
			console.log(arr);
		</script>
	</body>

</html>

2、获取和修改属性节点的值

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		
		<div class="div1" id="first">1</div>
		<input type="text" value="123" name="btn" />
		<a href="index1.html" title="链接">超链接</a>
		
		<script>
			
			var div1 = document.getElementById('first');
			//获取属性
			console.log(div1.className);//class属性
			console.log(div1.id);//id属性
			console.log(div1.tagName);//元素节点的标签名
			
			var btn = document.querySelector('input');
			console.log(btn.value);//获取value属性
			console.log(btn.name);//name属性
			
			var a = document.querySelector('a');
			console.log(a.title);//title属性
			console.log(a.href);//href属性
			
			//修改/设置标签属性
			div1.className = 'div2';
			btn.value = '这是个值';
			
		</script>
	</body>
</html>

标签自定义属性操作

  • getAttribute() 获取节点自定义的属性的值

  • setAttribute() 设置自定义属性的值

  • removeAttribute() 移除自定义属性    某些低版本浏览器不支持

<!doctype html>
<html>

	<head>
		<meta charset="UTF-8" />
		<title></title>
	</head>

	<body>

		<div id="box" myattr="自定义的属性"></div>

		<script type="text/javascript">
			var box = document.getElementById('box');
			//1.获取自定义属性的属性值
			console.log(box.getAttribute("myattr")); //自定义的属性

			//2.设置自定义属性的属性值
			box.setAttribute("myattr", "hello");
			console.log(box.getAttribute("myattr")); //hello

			//3.删除自定义的属性节点
			box.removeAttribute("myattr");
			console.log(box.getAttribute("myattr")); //null
		</script>
	</body>

</html>

3、获取文本节点

  • innerHTML
              从对象的开始标签到结束标签的全部内容,不包括Html标签。

  • outerHTML              
              除了包含innerHTML的全部内容外, 还包含对象标签本身。

  • innerText
                  从对象的开始标签到结束标签的全部的文本内容

<!doctype html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title></title>
	</head>
	<body>
		<div id="box">
			<span>我是span</span>
			<div>我是div</div>
		</div>
		<script type="text/javascript">
			var box = document.getElementById('box');
			//1.开始标签到结束标签之间的内容
			console.log(box.innerHTML);
			//2.innerHTML的内容在加上开始标签与结束标签
			console.log(box.outerHTML);
			//3.开始标签与结束标签之间的文本信息
			console.log(box.innerText);

			//4.设置标签文本内容
			box.innerText = '内容被修改了';
			//5.设置标签文本内容
			box.innerHTML = '内容又被修改了';
			//6.添加新的标签/内容中可以有标签
			box.innerHTML = '<h1>内容怎么老被修改</h1>';
		</script>
	</body>
</html>
posted on 2017-08-02 16:08  阳光洒在代码上  阅读(171)  评论(0编辑  收藏  举报