第二章 DOM初识之节点的属性和操作
来源:互联网 发布:淘宝的宝贝卖点 编辑:程序博客网 时间:2024/06/08 07:21
2.4 DOM的属性
nodeName
文档里的每个节点都有以下属性。
nodeName:一个字符串,其内容是给定节点的名字。
var name = node.nodeName;
* 如果节点是元素节点,nodeName返回这个元素的名称
* 如果是属性节点,nodeName返回这个属性的名称
* 如果是文本节点,nodeName返回一个内容为#text 的字符串
注:nodeName 是一个只读属性。
nodeType
nodeType:返回一个整数,这个数值代表着给定节点的类型。
nodeType 属性返回的整数值对应着 12 种节点类型,常用的有三种:
Node.ELEMENT_NODE —1 – 元素节点
Node.ATTRIBUTE_NODE —2 – 属性节点
Node.TEXT_NODE —3 – 文本节点
nodeType 是个只读属性
nodeValue
nodeValue:返回给定节点的当前值(字符串)
如果给定节点是一个属性节点,返回值是这个属性的值。
如果给定节点是一个文本节点,返回值是这个文本节点的内容。
如果给定节点是一个元素节点,返回值是 null
nodeValue 是一个 读/写 属性,但不能对元素节点的 nodeValue 属性设置值,
但可以为文本节点的 nodeValue 属性设置一个值。
var li = document.getElementById(“li”);
if(li.firstChild.nodeType == 3)
li.firstChild.nodeValue = “康康康康”;
[练习1]
<h1 id="h1">明天休息</h1>
问题:
打印 ”明天休息” (利用两种方法)
提示:使用(firstChild lastChild childNodes)
[练习2]
<ul> <li id="bj" value="beijing"> 北京 <p>海淀</p> 奥运 </li> <li id="sh" value="shanghai">上海</li></ul>
问题:
打印出 id=“bj” 该节点的所有子节点的(nodeName, nodeType, nodeValue)
同时打印文本值 北京 海淀 奥运
[练习3]
<select name="edu" id="edu"> <option value="本科">本科^^</option> <option value="大专">大专^^</option> <option value="中专">中专^^</option> <option value="幼儿园">幼儿园^^</option></select>
问题:
输出所有select元素下的所有option元素中对应的文本内容
例如:<option value="中专">中专^^</option>
输出—>中专^^
元素节点
//测试元素节点,输出节点名称,节点的类型,节点的值 var liElements=document.getElementsByTagName("li"); for(var i=0;i<liElements.length;i++){ alert(liElements[i].nodeName); alert(liElements[i].nodeType); alert(liElements[i].nodeValue); }
属性节点
//测试属性节点,输出属性节点名称,节点的类型,节点的值 var liElements=document.getElementsByTagName("li"); for(var i=0;i<liElements.length;i++){ var attrElement=liElements[i].getAttributeNode("value") alert("attrElement.nodeName "+attrElement.nodeName); alert("attrElement.nodeType "+attrElement.nodeType); alert("attrElement.nodeValue "+liElements[i].getAttribute("value")); }
文本节点
//测试元素节点,输出节点名称,节点的类型,节点的值 var liElements=document.getElementsByTagName("li"); for(var i=0;i<liElements.length;i++){ alert(liElements[i].childNodes[0].nodeName); alert(liElements[i].childNodes[0].nodeType); alert(liElements[i].childNodes[0].nodeValue); liElements[i].childNodes[0].nodeValue="南京"; alert(liElements[i].childNodes[0].nodeValue); //另一种读取方法 alert(liElements[i].firstChild.nodeName); alert(liElements[i].firstChild.nodeType); alert(liElements[i].firstChild.nodeValue); }
2.5 节点的操作
替换节点
replaceChild()
把一个给定父元素里的一个子节点替换为另外一个子节点
var reference = element.replaceChild(newChild,oldChild);
返回值是一个指向已被替换的那个子节点的引用指针。
如果被插入的子节点还有子节点,则那些子节点也被插入到目标节点中。
[练习4]
您喜欢的城市:<br/><ul id="city"> <li id="bj" value="beijing">北京</li> <li id="sh" value="shanghai">上海</li> <li id="cq" value="chongqing">重庆</li></ul>您喜欢的游戏:<br/><ul id="game"> <li id="fk" value="fankong">反恐<p id="jingying">精英</p></li> <li id="ms" value="moshou">魔兽</li> <li id="hj" value="hongjing">红警</li></ul>
问题:当单击“北京”这个节点时,北京这个节点被“反恐精英”替换
替换节点例子
//方法一// var cityElement=document.getElementById("city");// var loveElement=document.getElementById("love");// var cityChildElement=document.getElementById("beijing");// var loveChildElement=document.getElementById("fankong");// var oldElement=cityElement.replaceChild(loveChildElement,cityChildElement);// loveElement.appendChild(oldElement);// alert(oldElement.getAttribute("id")); var cityElement=document.getElementById("city"); cityElement.onclick=function(){ var cityChildElement=document.getElementById("beijing"); var loveChildElement=document.getElementById("fankong"); var oldElement=cityElement.replaceChild(loveChildElement,cityChildElement); loveElement.appendChild(oldElement); alert(oldElement.getAttribute("id")); }
查找属性节点
getAttribute()
返回一个给定元素的一个给定属性节点的值
var attributeValue = element.getAttribute(attributeName);
给定属性的名字必须以字符串的形式传递给该方法。
给定属性的值将以字符串的形式返回,如果给定属性不存在,getAttribute() 将返回一个空字符串.
通过属性获取属性节点
getAttributeNode(属性的名称)–Node
<li name="beijing" id="bj">北京</li> //通过属性名获取属性的值 var bjElement=document.getElementById("bj"); var attributeValue=eduElement.getAttribute("name"); alert("attributeValue "+attributeValue); //通过属性名获取属性的节点 var bjNode=eduElement.getAttributeNode("name"); alert(eduNode.nodeValue); alert(eduNode.nodeType); alert(eduNode.nodeName);
设置属性节点
setAttribute()
将给定元素节点添加一个新的属性值或改变它的现有属性的值。
element.setAttribute(attributeName,attributeValue);
属性的名字和值必须以字符串的形式传递给此方法
如果这个属性已经存在,它的值将被刷新;
如果不存在,setAttribute()方法将先创建它再为其赋值。
<li id="bj" >北京</li> //获取元素的引用 var bjElement=document.getElementById("bj"); //设置属性值 bjElement.setAttribute("name","beijing"); //获取设置的属性值 var nameValue=bjElement.getAttribute("name"); alert("nameValue "+nameValue);
创建新元素节点
createElement()
按照给定的标签名创建一个新的元素节点。方法只有一个参数:将被创建的元素的名字,是一个字符串.
var reference = document.createElement(element);
方法的返回值:是一个指向新建节点的引用指针。返回值是一个元素节点,所以它的 nodeType 属性值等于 1。
新元素节点不会自动添加到文档里,新节点没有 nodeParent 属性,它只是一个存在于 JavaScript 上下文的对象.
var pElement = document.createElement(“p”);
//创建一个新的元素 var pElement=document.createElement("li"); //设置属性值 pElement.setAttribute("id","pid"); //获取父元素 var loveElement=document.getElementById("love"); //在父元素中增加子元素loveElement.appendChild(pElement); //通过id获取刚创建的元素 var pidElement=document.getElementById("pid"); alert(pidElement.getAttribute("id"));
创建新文本节点
createTextNode()
创建一个包含着给定文本的新文本节点。这个方法的返回值是一个指向新建文本节点引用指针。
var textNode = document.createTextNode(text);
方法只有一个参数:新建文本节点所包含的文本字符串
方法的返回值:是一个指向新建节点的引用指针。它是一个文本节点,所以它的 nodeType 属性等于 3.
新元素节点不会自动添加到文档里,新节点没有 nodeParent 属性
var pElementText=document.createElement("li"); var textElement=document.createTextNode("南京"); pElementText.appendChild(textElement);
插入节点
(1)appendChild()
为给定元素增加一个子节点:
var newreference = element.appendChild(newChild).
给定子节点 newChild 将成为给定元素节点 element 的最后一个子节点。
方法的返回值是一个指向新增子节点的引用指针。
该方法通常与 createElement() createTextNode() 配合使用
新节点可以被追加给文档中的任何一个元素
var newliElement=document.createElement("li"); var textNode=document.createTextNode("北京"); newliElement.appendChild(textNode); document.body.appendChild(newliElement); var liElement=document.getElementsByTagName("li"); var textValue=liElement[0].firstChild.nodeValue; alert(textValue);
[练习5]
<select name="edu" id="edu"> <option value="博士">博士^^^^</option> <option value="硕士">硕士^^^^</option> <option value="本科">本科^^^^</option> <option value="幼儿园">幼儿园^^^^</option></select>
问题: 在id=edu下增加<option value="大专">大专^^^^^</option>
(2)insertBefore()
把一个给定节点插入到一个给定元素节点的给定子节点的前面
var reference = element.insertBefore(newNode,targetNode);
节点 newNode 将被插入到元素节点 element 中并出现在节点 targetNode 的前面.
节点 targetNode 必须是 element 元素的一个子节点。
该方法通常与 createElement() 和 createTextNode() 配合使用
<ul id="city"> <li value="beijing^" id="beijing">北京</li> </ul> <ul id="city01"> <li value="shanghai^" id="shanghai">上海</li> </ul> //获取父节点 var parentCityNode=document.getElementById("city"); //获取子节点 var beijingNode=document.getElementById("beijing"); var shanghaiNode=document.getElementById("shanghai"); //插入 parentCityNode.insertBefore(shanghaiNode,beijingNode);
<ul id="city"> <li value="beijing^" id="beijing">北京</li> </ul> //获取父节点 var parentCityNode=document.getElementById("city"); //获取子节点 var beijingNode=document.getElementById("beijing"); //创建节点newShanghaiNode var newShanghaiNode=document.createElement("li"); //创建newShanghaiNode节点的文本节点 var newTextNode=document.createTextNode("上海");//在创建的节点上增加文本 newShanghaiNode.appendChild(newTextNode); //插入节点 parentCityNode.insertBefore(newShanghaiNode,beijingNode);
(3)DOM 没有提供 insertAfter() 方法
function insertAfter(newElement,targetElement){ //获取目标元素的父节点 var parentElement=targetElement.parentNode; //如果目标元素是最后一个元素,则新元素插入到目标元素的后面 if(parentElement.lastChild==targetElement){ parentElement.appendChild(newElement); }else{//如果目标元素不是最后一个元素,则新元素插入到目标元素的下一个兄弟节点的前面,即目标元素的后面 parentElement.insertBefore(newElement,targetElement.nextSibling); }}
删除节点
removeChild()
从一个给定元素里删除一个子节点
var reference = element.removeChild(node);
返回值是一个指向已被删除的子节点的引用指针。
某个节点被removeChild()方法删除时,这个节点所包含的所有子节点将同时被删除。
<ul id="city"> <li value="beijing^" id="beijing">北京</li> </ul> var ulElement=document.getElementById("city"); var liElement=document.getElementById("beijing"); ulElement.removeChild(liElement);
如果想删除某个节点,但不知道它的父节点是哪一个,parentNode 属性可以帮忙。
<ul id="city"> <li value="beijing^" id="beijing">北京</li></ul> var liElement=document.getElementById("beijing"); var parentElement=liElement.parentNode; parentElement.removeChild(liElement);
遍历节点树
ChildNodes:返回一个数组,这个数组由给定元素节点的子节点构成:
var nodeList = node.childNodes;
文本节点和属性节点都不可能再包含任何子节点,所以它们的 ChildNodes 属性永远会返回一个空数组。
如果想知道某个元素有没有子节点,可以用 hasChildNodes 方法。
如果想知道某个元素有多少个子节点,可以用 childNodes 数组的 length 属性。
childNodes 属性是一个只读属性。
获取第一个子节点
firstChild:该属性返回一个给定元素节点的第一个子节点,返回这个节点对象的指针。
var reference = node.firstChild;
文本节点和属性节点都不可能包含任何子节点,所以它们的 firstChild 属性永远会返回 null。
某个元素的 firstChild 属性等价于这个元素的 childNodes 节点集合中的第一个节点,即:
var reference = node.ChildNodes[0];
firstChild 属性是一个只读属性。
获取最后一个子节点
lastChild:对应 firstChild 的一个属性。
nextSibling: 返回一个给定节点的下一个兄弟节点。
parentNode:返回一个给定节点的父节点。
parentNode 属性返回的节点永远是一个元素节点,因为只有元素节点才有可能包含子节点。
document 节点的没有父节点。
previousSibling:返回一个给定节点的上一个兄弟节点
innerHTML属性
浏览器几乎都支持该属性,但不是 DOM 标准的组成部分。
innerHTML 属性可以用来读,写某给定元素里的 HTML 内容。
<div id="city"></div> var divElement=document.getElementById("city"); divElement.innerHTML="<li value='beijing^'' id='beijing'>北京</li>";
- 第二章 DOM初识之节点的属性和操作
- 第二章 DOM初识之概念、结构、类型和节点的查找
- DOM下的节点属性和操作
- DOM下的节点属性和操作小结
- DOM之节点的基本属性
- DOM节点的属性和方法
- DOM节点的属性和方法
- Jquery中的DOM操作 (五.包裹节点和属性操作)
- jQuery的DOM操作之遍历节点
- jQuery的DOM操作之遍历节点
- 轻松学习JavaScript二十一:DOM编程学习之获取元素节点的子节点和属性节点
- DOM节点的操作
- Dom节点的操作
- 解析Dom节点和属性
- DOM节点属性和方法
- DOM节点属性和方法
- js的DOM(节点属性)
- Dom 节点的属性访问
- iOS 统计打点
- sleep() 和 wait() 有什么区别?
- Android项目:手机安全卫士(1)—— 闪屏界面
- c3p0连接池和服务器连接池对比
- iOS block教程
- 第二章 DOM初识之节点的属性和操作
- c/c++内存对齐详解
- EDIUS中该如何保存默认特效
- iOS 9开发小技巧:LayoutGuide,Storyboard Reference
- Spring 4.2.4.RELEASE MVC 学习笔记 - 1 - Maven(咋个办呢 zgbn)
- 算法导论第三版第五章思考题
- 二十二、startActivityForResult用法详解
- [UE4]AnimDynamics简介
- ScrollView嵌套ListView不置顶显示