0
点赞
收藏
分享

微信扫一扫

javascript dom

dom.xml

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
	<book>
		<title>Harry Potter</title>
		<author cat='catogary'>J K. Rowling</author>
		<year>2005</year>
	</book>
</bookstore>
 
 
 
 
 
 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>dom.html</title>
	
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
    <meta name="keywords" content="keyword1,keyword2,keyword3">
    <meta name="description" content="this is my page">
    <meta name="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
	<script type="text/javascript" src="../js/jquery-1.11.3.js"></script>

  </head>
  
  <body>
  	<p id="intro">My first paragraph...</p>
    <ul>
		<li>List item 1</li>
		<li>List item 2</li>
		<li>List item 3</li>
	</ul>
	<div id="div"></div>
	<script type="text/javascript">
	// <![CDATA[
		function show(str) {
			$("#div").append($("<p></p>").text("" + str));
		}
		
		//DOM  Document Object Model(文档对象模型)定义了访问 HTML 和 XML 文档的标准:
		//“W3C 文档对象模型 (DOM) 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。”
		//W3C DOM 标准被分为 3 个不同的部分:
		//•核心 DOM - 针对任何结构化文档的标准模型
		//•XML DOM - 针对 XML 文档的标准模型
		//XML DOM 定义了所有 XML 元素的对象和属性,以及访问它们的方法。
		//•HTML DOM - 针对 HTML 文档的标准模型
		//HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它们的方法。
		//换言之,HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。
		
		//在 HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML。
		//DOM 节点
		//根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:
		//•整个文档是一个文档节点
		//•每个 HTML 元素是元素节点
		//•HTML 元素内的文本是文本节点
		//•每个 HTML 属性是属性节点
		//•注释是注释节点
		
		//DOM 处理中的常见错误是认为元素节点包含文本。元素节点的文本是存储在文本节点中的。
		
		//编程接口
		//可通过 JavaScript (以及其他编程语言)对 HTML DOM 进行访问。
		//所有 HTML 元素被定义为对象,而编程接口则是对象方法和对象属性。
		//方法是您能够执行的动作(比如添加或修改元素)。
		//属性是您能够获取或设置的值(比如节点的名称或内容)。
		
		//HTML DOM 方法:方法是我们可以在节点(HTML 元素)上执行的动作。
		//getElementById(id) 	- 获取带有指定 id 的节点(元素)
		//getElementsByTagName() 	- 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。 
		//getElementsByClassName() 	- 返回包含带有指定类名的所有元素的节点列表(集合/节点数组)。 
		//注释:getElementsByClassName() 在 Internet Explorer 5,6,7,8 中无效。
		//appendChild(node) 	- 插入新的子节点(元素),将新元素作为父元素的最后一个子元素进行添加。
		//insertBefore(node, posNode) 		- 在指定的子节点前面插入新的子节点。 
		//removeChild(node) 	- 删除子节点(元素)
		//提示:不能在不引用parentNode的情况下删除某个节点,常用的解决方法:childNode.parentNode.removeChild(childNode);
		//createElement(tag) 	- 创建元素节点。 
		//createTextNode(text) 	- 创建文本节点。 
		//createAttribute() 	- 创建属性节点。
		//getAttribute() 		- 返回指定的属性值。 
		//setAttribute() 		- 把指定属性设置或修改为指定的值。 
		
		//HTML DOM 属性:属性是节点(HTML 元素)的值,您能够获取或设置。
		//innerHTML 	- 节点(元素)的文本值,innerHTML 属性可用于获取或改变任意 HTML 元素,包括 <html> 和 <body>。
		//nodeName		- 节点的名称。nodeName 是只读的。
		//•元素节点的 nodeName 与标签名相同
		//•属性节点的 nodeName 与属性名相同
		//•文本节点的 nodeName 始终是 #text
		//•文档节点的 nodeName 始终是 #document
		//注释:nodeName 始终包含 HTML 元素的大写字母标签名。
		
		//nodeValue		- 节点的值。
		//•元素节点的 nodeValue 是 undefined 或 null
		//•文本节点的 nodeValue 是文本本身
		//•属性节点的 nodeValue 是属性值
		
		//nodeType		- 节点的类型。nodeType 是只读的。元素=1、属性=2、文本=3
		
		//导航节点关系:
		//parentNode
		//firstChild	- element.firstChild.nodeValue
		//lastChild
		//nextSibling
		//previousSibling

		//childNodes 	- 节点(元素)的子节点列表
		//除了 innerHTML 属性,您也可以使用 childNodes 和 nodeValue 属性来获取元素的内容。element.childNodes[0].nodeValue
		//attributes 	- 节点(元素)的属性节点列表
		
		//HTML DOM 根节点
		//有两个特殊的属性,可以访问全部文档:
		//•document.documentElement - 全部文档,以<html></html>标签为根节点的文档
		//•document.body 			- 文档的主体,以<body></body>标签为根节点的文档
		

		//XML DOM 定义了访问和处理 XML 文档的标准方法。
		//DOM 是这样规定的:
		//•整个文档是一个文档节点
		//•每个 XML 标签是一个元素节点
		//•包含在 XML 元素中的文本是文本节点
		//•每一个 XML 属性是一个属性节点
		//•注释属于注释节点
		
		//DOM - 空白和换行
		//Firefox,以及其他一些浏览器,会把空的空白或换行作为文本节点来处理,而 Internet Explorer 不会这样。
		//如需忽略元素节点之间的空文本节点,需要检查节点类型。元素节点的类型是 1。
		
		//解析器把 XML 转换为 JavaScript 可存取的对象。
		//Error: Access Across Domains 
		//出于安全方面的原因,现代的浏览器不允许跨域的访问。网页以及它试图加载的 XML 文件,都必须位于相同的服务器上。
		//解析 XML 字符串
		//注释:Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象。
		function parseXMLStr(xmltext) {
			var xmlDoc = null;
			try {
			  //Internet Explorer
			  xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			  //关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
			  xmlDoc.async = "false";
			  xmlDoc.loadXML(xmltext);
			} catch (error) {
	  			try {
	  				//Firefox, Mozilla, Opera, etc.
	 				var parser = new DOMParser();
					xmlDoc = parser.parseFromString(xmltext, "text/xml");
				} catch(e) { show(e.message); }
			}
			return xmlDoc;
		}
		//解析 XML 文件
		function parseXML(url) {
			var xmlDoc = null;
			try {
				//Internet Explorer
				xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
				xmlDoc.async=false;
				xmlDoc.load(url);
			} catch(error) {

				try {
					//Firefox, Mozilla, Opera, etc.
    				xmlDoc = document.implementation.createDocument("", "", null);
    				xmlDoc.async=false;
    				xmlDoc.load(url);
				} catch (e) { 

					try {
						//Google Chrome    
						var xmlhttp = new XMLHttpRequest();
				        xmlhttp.open('GET', url, false);
				        xmlhttp.setRequestHeader('Content-Type', 'text/xml');
				        xmlhttp.send('');
				        xmlDoc = xmlhttp.responseXML; 
     				} catch(e1) {
     					show(e1);
						show("您的浏览器不能正常加载文件。请切换到兼容模式,或者更换浏览器");  
     				}  
				}
			}
			
			return xmlDoc;
		}
		
		var xmltext = "<bookstore>";
		xmltext += "<book>";
		xmltext += "<title>Harry Potter</title>";
		xmltext += "<author cat='catogary'>J K. Rowling</author>";
		xmltext += "<year>2005</year>";
		xmltext += "</book>";
		xmltext += "</bookstore>";
		
		var xmlobj = parseXMLStr(xmltext);
		show(xmlobj.getElementsByTagName("title")[0].childNodes[0].nodeValue);
		
		var xmlfile = parseXML("dom.xml");
		show(xmlfile.getElementsByTagName("author")[0].childNodes[0].nodeValue);
		
		show([xmlfile.documentElement.childNodes.length, xmlfile.documentElement.nodeName]);
		var arthor = xmlfile.getElementsByTagName("author")[0];
		show(arthor.nodeName + " = " + arthor.childNodes[0].nodeValue);
		//获取属性
		var attr = arthor.attributes;
		show(attr.getNamedItem("cat").nodeValue);
		
		
	    //使用getElementById DOM方法来访问p段落
		var introParagraph = document.getElementById("intro");
	 	// 访问无序列表: [0]索引
		var unorderedList = document.getElementsByTagName('ul')[0];
		//  获取所有的li集合:
		var allListItems = unorderedList.getElementsByTagName('li');
		// 循环遍历
		for (var i = 0, length = allListItems.length; i < length; i++) {
			// 弹出该节点的text内容
			show(allListItems[i].firstChild.data);
		}
		
		//操作元素
		document.getElementById("intro").style.color = '#FF0000';
		//通常DOM操作都是改变原始的内容,最简单的是使用innerHTML属性
		var myIntro = document.getElementById("intro");
		// 替换当前的内容
		myIntro.innerHTML = 'New content for the <strong>amazing</strong> paragraph!';
		// 添加内容到当前的内容里 
		myIntro.innerHTML += '... some more content...';
		show(myIntro.innerHTML);
		
		//Node节点
		//通过DOM API创建内容的时候需要注意node节点的2种类型,一种是元素节点,一种是text节点,
		//创建元素可以通过createElement方法,而创建text节点可以使用createTextNode
			
		// 添加内容
		var someText = 'This is the text I want to add';
		var textNode = document.createTextNode(someText);
		myIntro.appendChild(textNode);
		show(myIntro.innerHTML);
		
		var myNewLink = document.createElement('a'); // <a/>
		myNewLink.href = 'http://google.com'; // <a href="http://google.com"/>
		myNewLink.appendChild(document.createTextNode('Visit Google'));
		// <a href="http://google.com">Visit Google</a>
						  
		// 将内容附件到文本节点
		myIntro.appendChild(myNewLink);
		//show(myIntro.innerHTML);
		
		//alert(document.body.innerHTML);
	
		//提示:您只能在 HTML 输出中使用 document.write。如果您在文档加载后使用该方法,会覆盖整个文档。
		document.write("<h1>This is a heading</h1>");
	// ]]>
	</script>

  </body>
</html>

举报

相关推荐

0 条评论