HTML DOM(二):节点的增删改查

上一篇讲述了DOM的基本知识,从其得知,在DOM眼中,HTML的每个成分都可以看作是节点(文档节点、元素节点、文本节点、属性节点、注释节点,其中,属性节点是属于元素节点),本篇的内容就是通过DOM对这些节点进行增删改查的操作。

获取(R)
1. getElementById(id)、getElementsByName(name)、getElementsByTagName(tagName),这三种方法都会忽略文档的结构。

  • getElementById(id):通过id获取元素节点,如果页面上含有多个相同id的节点,那么只获取第一个节点,理论上,id在页面中应该是唯一的。jquery中通过$("#id")来获得节点,这种方式类似于css中的id选择器。
  • getElementsByName(name):通过name获取一组元素节点,返回的是具有相同name的节点数组。注意,这个方法在IE和W3C(FireFox、Chrome)下表现是不一样的,这个方法应该不是DOM LEVEL 1里的规范,IE支持LEVEL 1,和后来的标准就有很多差异了。主要有如下几点区别:

     IE下通过getElementsByName(name)只能取得表单元素的节点;
     IE下不区分id和name,也就是说通过getElementsByName(name)取得的节点数组也包含id和name相同的了,通过getElementById(id),也可以将name作为参数,看MSDN的官方说明。
     When you use the getElementsByName method, all elements in the document that have the specified NAME or ID attribute value are returned. Elements that support both the NAME and the ID attribute are included in the collection returned by the getElementsByName method, but not elements with a NAME expando.

<html>
	<head>
		<title>节点的增删改查</title>
		<script type="text/javascript">
			function init() {
				alert(document.getElementById("div1").nodeName);
				alert(document.getElementsByName("container").length);// IE结果是2,Chrome、FF结果是3
				alert(document.getElementById("container").value);// IE结果是1,Chrome、FF结果是2
			}
		</script>
	</head>
	<body >
		<div id="div1" name="container">1</div>
		<!--<div id="div1"></div>-->
		<span id="div1" name="container">2</span>
		<input name="container" type="text" value="1" />
		<input id="container" type="text" value="2" />
	</body>
</html>
  •   getElementsByTagName(tagName):通过tagName获取一组元素节点,返回的是具有相同tagName的节点数组。这个方法的特殊之处在于不仅仅可以通过顶层document来使用,所有元素节点都可以使用。如:document.getElementById("container").getElementByTagName("div");,这跟css样式有些相像,比如定义id为container元素节点下的所有div样式:.container div{display:none;}。

2. parentNode、firstChild以及lastChild,这三种属性都可以递归来使用。
html实例:

<html>
	<head>
		<title>节点的增删改查</title>
	</head>
	<body>
		<div id="level1">
      			<div id="level21">
				<div id="level3"><div>
     			</div>
      			<div id="level22"></div>
		</div>
	</body>
</html>

  

  parentNode:取得当前节点的父节点,如document.getElementById("level21").parentNode,也可以obj.parentNode.parentNode.parentNode。
  firstChild:取得当前节点的第一个子节点,如document.getElementById("level1").firstChild;,也可以document.getElementById("level1").firstChild.firstChild。
  lastChild:取得当前节点的最后一个子节点,如document.getElementById("level1").lastChild。

3. 根节点,document.documentElement得到HTML以及XML文档中的根节点,document.body提供了对body节点的直接访问。
4. 所有子节点:childNodes和children,各种版本各种浏览器下表现都不一样。
5. 节点信息:nodeName(tagName)、nodeValue、nodeType.

  • nodeName

  元素节点的nodeName是标签名称
  属性节点的nodeName是属性名称
  文本节点的nodeName是#text
  文档节点的nodeName是#document

  • nodeValue

  文本节点的nodeValue包含文本
  属性节点的nodeValue包含属性值
  元素节点和文档节点没有nodeValue

  • nodeType
元素类型 节点类型
元素 1
属性 2
文本 3
注释 8
文档
9

创建(C)&修改(U)&删除(D)
写一个点击单元格变为文本框的示例。

<html>
	<head>
		<title>节点的增删改查</title>
		<script type="text/javascript">
			function appendInput(tdNode) {
				// 创建input元素节点,createElement创建元素节点,createTextNode(value)创建文本节点
				var inputNode = document.createElement("input");
				// 给input属性赋值
				inputNode.value = tdNode.innerText;
				inputNode.name = "value";
				// 删除单元格的文本节点,参数为要删除的子节点对象
				tdNode.removeChild(tdNode.firstChild);
				// 将input追加到单元格中,appendChild(node)将node追加到父节点末尾,insertBefore(node1, node2)是将node1加入到node2之前
				tdNode.appendChild(inputNode);
				// 聚焦input,在chrome下,光标直接定位到文本最右边,IE下确实最左边
				inputNode.focus();
				// 将光标移到文本最右边
				moveCursorToRight(inputNode);
			}

			/** 光标移到文本最右边 */
			function moveCursorToRight(obj) {
				var r = obj.createTextRange();
				r.moveStart(‘character‘, obj.value.length);
				r.collapse(true);
				r.select();
			}
		</script>
	</head>
	<body>
		<table>
			<tr>
				<td onclick="appendInput(this)">Hello!</td>
			</tr>
		</table>
	</body>
</html>

  

时间: 2024-10-14 07:14:04

HTML DOM(二):节点的增删改查的相关文章

HTML DOM节点的增删改查

上篇博客中,我们已经初步接触了DOM基础,可是我们学习是为了可以更好地应用,今天我们就来看看DOM节点的增删改查. 无论在哪里,我们想要操作一个东西,总是应该先去获得它.那么我们怎么获得呢? HTML的每一个成分都能够看作是节点(文档节点.元素节点.文本节点.属性节点.凝视节点.当中,属性节点属于元素节点). W3C 提供了比較方便简单的定位节点的方法和属性,以便我们高速的对节点进行操作. 分别为:getElementById().getElementsByTagName().getElemen

【JavaScript】网页节点的增删改查

一.基本概念 这部分也就是所谓的"HTML DOM",所谓HTML DOM也就是Web页面加载规则,是一个规则,也就是网页组成的基本公式. 也就是所有网页都必须按照:<html><body></body></html>--的规则编写,也按照这样的规则加载. 所谓的"网页节点",也叫"DOM节点"的通俗解释,例如html节点下的内容就是<html></html>之间所有内容,b

【jQuery】对网页节点的增删改查

本文与<[JavaScript]网页节点的增删改查>(点击打开链接)为姊妹篇,其实JavaScript对DOM的操作已经总结了很久的,而对于jQuery对网页节点的操作,虽然一直在用,但一直没有好好总结一下,实在是不应该. 下面举同样的例子来说明这个问题: 如上图,提供3个按钮,1个下拉列表,1个输入框,提供增删改查的操作. 网页中最多10个节点,最少0个节点,多了不让加,少了不让减. 首先是本网页的基本布局: <!DOCTYPE HTML PUBLIC "-//W3C//DT

MyBatis之二:简单增删改查

这一篇在上一篇的基础上简单讲解如何进行增删改查操作. 一.在mybatis的配置文件conf.xml中注册xml与注解映射 <!-- 注册映射文件 --> <mappers> <!-- 通过xml方式映射 --> <mapper resource="com/mybatis/crud/userMapper.xml" /> <!-- 通过注解方式映射 --> <mapper class="com.mybatis.c

MVC3+EF4.1学习系列(二)-------基础的增删改查和持久对象的生命周期变化

上篇文章中 我们已经创建了EF4.1基于code first的例子  有了数据库 并初始化了一些数据  今天这里写基础的增删改查和持久对象的生命周期变化 学习下原文先把运行好的原图贴来上~~ 一.创建详细页 首先 我们先在控制器下 添加详细页的方法 因为这篇文章后面要介绍持久对象声明周期的变化 所以在这里先看下有哪些状态 EF里一共有这五中生命状态类型 其实 看名字我们可以大概猜测出个一二三来~~  游离的 未改变的  新添加的  已删除的 修改的  但是是怎么变化的能 我们在后面的代码中实践与

基于MVC和Bootstrap的权限框架解决方案 二.添加增删改查按钮

上一期我们已经搭建了框架并且加入了列表的显示, 本期我们来加入增删改查按钮 整体效果如下 HTML部分,在HTML中找到中意的按钮按查看元素,复制HTML代码放入工程中 <a class="btn btn-small element" data-original-title="新增" href="/Customer/Add" data-toggle="tooltip" data-placement="top&q

小白5分钟上手c#数据库操作(二) 基础的增删改查

上一小节,我们已经准备好了一个数据库文件,现在我们先不用微软包装好的各种Entity Framework, 自己用基础的方法对数据库进行增删改查. 前期准备: 新建一个console工程,把上一小节的数据库拷贝到工程目录下,copy local 设置成true, 目录结构大致长这样: 然后添加一个nuget包,方面后面使用各种c#提供的方法: 基本上常用的操作里,查数据是一类,增删改是一类 先看怎么查数据: // 查询数据 using (var connection = new SQLiteCo

【mfc】学生信息管理,实现List控件节点的增删改查

之前在mfc这个专栏里面,写了很多关于win32的程序, 其实也没什么的,win32是mfc的基础, mfc只是win32的扩展,系统自带的扩展,新建一个mfc如同新建一个win32程序,不过这个win32程序一开始就带了很多空函数框架. 一.基本目标 要建立如下图所示的学生信息管理mfc程序,当然这个程序以后应该考虑连接数据库,access,sql server都可以, 同时连同<[mfc]用对话框分页实现用户登录>(点击打开链接),让用户登录之后才能够管理信息,当然这是后话. 1.这个程序

利用XML的dom进行数据的增删改查

import java.io.FileOutputStream; import javax.swing.event.DocumentListener; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.T