Document (二)

本文深入解析DOM树结构,包括父节点、子节点、同辈节点的概念及获取方法,节点属性的使用,以及如何检测子节点和属性。同时,详细介绍了DOM节点的插入、删除、替换、复制和移动操作,并附带示例代码。

父节点,子节点和同辈节点:
父节点:parentNode:
parentNode返回的永远都是一个节点,因为只有元素节点才有可能包含子节点。
document节点没有父节点。也就是文档节点没有父节点,也就是HTML
子节点:childNode:
childNodes,获取指定节点的所有子节点。其实上个例子已经使用了。
firstChild:指定第一个子节点。
lastChild:指定最后一个子节点。
同辈节点:
nextSibling:返回一个给定节点的下一个兄弟节点。
previousSibling:返回一个节点的上一个兄弟节点。

示例如下:
 <body>
  	<ul id="city">
    	<li id="bj" name="beijing">北京</li>
		<li id="tj" name="tianjin">天津</li>
    </ul>
	<p>你好</p><input type="text">
	<script type="text/javascript">
		//获取p标签的父,子,兄节点
		var p = document.getElementsByTagName("P")[0];
		alert(p.parentNode);//body
		alert(p.childNodes[0].nodeValue)//你好
		alert(p.previousSibling.nodeValue)//空格,说明空格也会作为一个节点
		alert(p.nextSibling.nodeName);//input。这里就没出现空格,就是input节点
	</script>
  </body>

节点属性:
节点属性attributes是Node接口定义的属性。
节点属性attributes就是节点的属性(特别是元素节点)的属性。
事实上,attributes中包含的是一个节点所有属性的集合。
attributes.getNameItem()和Element元素的getAttribute()方法很相似。

<body>
     <ul id="city">
    	<li id="bj" name="beijing">北京</li>
		<li id="tj" name="tianjin">天津</li>
    </ul>
	<script type="text/javascript">
		var bj = document.getElementById("bj");
		alert(bj.attributes[1].nodeValue);		
	</script>
  </body>

检测子节点和属性
查看是否有子节点:hasChildNodes();
查看是存在属性:hasAttributes();
即使节点中没有定义属性,其attributes属性还是有效的,而且长度是0。同样childNodes属性也是如此。
当你想知道某个节点是否包含子节点或属性时,使用hasChildNodes(),hasAttributes()。如果想知道包含多少个:attributes和childNodes属性。
在IE中不存在hasAttributes();方法。(不使用)

示例如下:
<body>
   	<input type="text" id="username" value="username">
	<p>
		明天休息
	</p>
	<script type="text/javascript">
//		var username = document.getElementById("username");
//		alert(username.hasChildNodes());//false
//		alert(username.hasAttribute());//无效果	
		
		var p = document.getElementsByTagName("p")[0];
		alert(p.hasChildNodes());//true
		
	</script>
  </body>

操作Dom节点数:
插入节点:
appendChild()方法。
insertBefore()方法。
没有insertAfter()方法。
删除节点:
removeChild()方法。
替换节点:
replaceChild()

示例
<body>
    <ul id="city">
    	<!--注意这里不要回车-->
	    <li id="bj" name="beijing">北京</li><li id="tj" name="tianjin">天津</li>
    </ul>
	<script type="text/javascript">
	//创建<li id="sh" name="shanghai">上海</li>节点,增加到天津节点的前面
//		var liElement = document.createElement("li");
//		liElement.appendChild(document.createTextNode("上海"));
//		liElement.setAttribute("id","sh");
//		liElement.setAttribute("name","shanghai");
//		liElement.insertBefore(document.getElementById("tj"));
//		document.getElementById("city").appendChild(liElement);
		
		//<li id="sh" name="shanghai">上海</li>节点插入北京节点的后面,没有insertAfter()方法。
		
		var liElement = document.createElement("li");
		liElement.appendChild(document.createTextNode("上海"));
		liElement.setAttribute("id","sh");
		liElement.setAttribute("name","shanghai");
		
		var bjElement = document.getElementById("bj")
		//得到兄弟节点
		var nextElement = bjElement.nextSibling;
		liElement.insertBefore(nextElement);
		//添加到city下面
		document.getElementById("city").appendChild(liElement);
		
		
		
	</script>
  </body>

复制和移动节点:
复制节点:cloneNode(boolean)方法,其中boolean参数是判读是否复制子节点。
移动节点:由三种方法组合完成:
查找节点:
getElementById();通过节点id属性,查找对应节点。
getElementsByName();通过节点名称,查找对应节点。
getElementsByTagName();通过节点名称,查找对应节点。
插入节点:
insertBefore()方法
appendChild()方法。
替换节点:
replaceChild()方法。

示例代码如下:
  <body>
  	<ul id="city">
    	<li id="bj" name="beijing">北京</li>
		<li id="tj" name="tianjin">天津</li>
    </ul>
	<ul id="game">
    	<li id="fk" name="fankong">反恐精英</li>
		<li id="xj" name="xingji">星际</li>
    </ul>
	<script type="text/javascript">
		//当点击北京节点,就和反恐精英替换
		document.getElementById("bj").onclick = function(){
			//得到北京节点
			var bjElement = document.getElementById("bj");
			//得到反恐精英
			var fkElemet = document.getElementById("fk");
			//这里也可以:this.parentNode.replaceChild(fkElemet,bjElement);
			bjElement.parentNode.replaceChild(fkElemet,bjElement);
		}		
	</script>
  </body>
复制案例:
<body>
  		<input type="button" id="login" value="登陆">
		<p>
			按钮来这:
		</p>
		<script type="text/javascript">
			document.getElementById("login").onclick = function(){
				
				var loginElement = document.getElementById("login");
				
				//也可以写成:var copy = this.cloneNode(true);
				var copy = loginElement.cloneNode(true);
				
				var pElemet = document.getElementsByTagName("p")[0];
				pElemet.appendChild(copy);
			}
		</script>
  </body>
提供的引用内容未涉及中望CAD次开发中DocumentWindow的相关信息,不过可以从一般CAD次开发的角度来推测DocumentWindow的使用方法和开发教程的大致内容。 在CAD次开发里,DocumentWindow通常代表文档窗口,这是用户与CAD文档进行交互的界面。其使用方法可能包含如下方面: ### 访问DocumentWindow对象 在次开发代码中,需要先获取DocumentWindow对象的引用。以Python为例,可能的代码如下: ```python # 假设这是中望CAD次开发的Python接口 import zwcad # 获取当前活动文档的窗口 doc = zwcad.Application.DocumentManager.MdiActiveDocument window = doc.DocumentWindow ``` ### 操作DocumentWindow 获取对象引用后,就能对其进行各种操作,例如调整窗口大小、位置,设置窗口状态等。 ```python # 设置窗口大小 window.Width = 800 window.Height = 600 # 设置窗口位置 window.Left = 100 window.Top = 100 # 设置窗口状态为最大化 window.WindowState = zwcad.WindowState.Maximized ``` ### 处理DocumentWindow事件 可以为DocumentWindow的事件编写处理程序,以响应窗口的各种操作。 ```python # 定义窗口关闭事件处理函数 def on_window_closed(): print("DocumentWindow已关闭") # 绑定窗口关闭事件 window.Closed += on_window_closed ``` 开发教程一般会按照以下步骤展开: 1. 环境搭建:介绍中望CAD次开发的环境搭建,包含安装开发工具、配置开发环境等。 2. 基础概念:讲解CAD次开发的基础概念,如DocumentDocumentWindow、Command等。 3. 代码示例:给出DocumentWindow使用的详细代码示例,包含获取对象、操作窗口、处理事件等。 4. 实践项目:通过实际项目让开发者掌握DocumentWindow的使用方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值