<!--*DOM 文档对象模型
*Document Object Model
*文档:标记型文当(html/xml)
*对象:封装了属性和行为的实例
*模型:共性特征的体现
*DOM解析HTML
*通过DOM的方法,把HTML全部(元素[标签],文本,属性)都封装成了对象
*<span id="spanId">文本</span>
*DOM想要操作标记型文档,必须要先解析(解析器)
*DOM解析HTML(浏览器可以解析HTML,所以不用我们再创建解析器)
*浏览器通过DOM解析HTML?
*树只有一个根节点
没有子节点的节点交树叶
没有父节点的节点是根节点
每个节点只有一个父节点,可以有多个子节点
树的高度:层级
*Document:代表整个文档,即整个树
Element:元素(标签)对像
Attribute:属性对象
Te=xt:文本对象
Node:节点对象,是以上对象的父类
*DOM的三个级别
*level1:将HTML文档封装成对象
*level2:在level1的基础上添加了新的功能,对时间和CSS样式的支持
*level3:支持xml1.0德系新特性
*DHTML不是一种编程语言
*HTML:封装数据,通过各种标签。eg:<span>被封装的数据</span>
*CSS:设置样式(显示效果)
*DOM:操作HTML(解析HTML)
*JS:提供逻辑(判断,循环语句)
*Document:代表整个文档
*方法:
getElementById("id值"):(经常使用)通过元素的id的属性获取元素的兑现
getElementsByName("name属性值"):通过名称获取元素对象的集合(返回的是数组)
getElementsByTagName("标签的名称"):通过标签名称来获取对象的集合(返回的是一个数组)
write("文本的内容(HTML标签)"):把文本的内容写到浏览器上
*练习:在ul无序列表下,添加一个子节点。
*步骤:创建元素对象<li>深圳</li>
document.createElemnt
创建文本对象 深圳
document.createTextNode
把深圳添加到li的下面,作为li的子节点
li.appendChild(text)
把li添加到ul下面,作为ul的子节点
ul.appendChild(li)
*Element对象
*获取元素对象
*getAttribute("属性名称"):获取属性值
*setAttribute("属性名称","属性的值"):设置或者修改属性的值
*removeAttribute("属性名称"):删除属性
*获取元素下的所有子节点(**************)
*Element.getElementsByTagName
*Node:节点对象
*nodeName:节点名称
*nodeType:节点类型
*nodeValue:节点值
//此时不能获取span标签里面的文本
<span>文本</span>
元素 属性 文本
nodeName 大写的标签名 属性名称 #text
nodeType 1 2 3
nodeValue null 属性的值 文本的内容
*parentNode:获取父节点(返回的永远是一个元素节点),用子节点的对象去调用
*childNodes:获取所有子节点
*firstChild:第一个子节点
*lastChild:最后一个子节点
*nextSibling:上一个兄弟节点
*如果通过ul获取北京子节点,使用ul.firstElementChild
*如果使用的是IE6-8,使用ul。firstChild
<span id="spanId">文本</span>
*使用span的标签获取span中间的文本内容,需要使用firstChild(不管是什么浏览器)
*方法:
*hasChildNodes():检查是否包含子节点
*hasAttributes():检查是否包含属性
*appendChild(node):父节点调用,在末尾添加子节点
*insertBefore(new,old):在指定节点之前添加子节点
*replaceChild(new,old):替换节点,父节点调用
*removeChild("node"):删除节点,父节点调用
*cloneNode(boolean):复制节点,不是父节点调用
*true:复制子节点,即可以复制里面包含的内容
*false:不复制子节点,默认值
*谁想复制,谁就去调用。
*innerHTML:获取和设置文本内容
*
*事件
*onclick 点击事件
*onload 加载事件
*onfocus 获取焦点事件
*onblur 失去焦点事件
*全选/全不选/反选练习
<input type="checkbox" />
*默认值,checked,选中
-->
<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<body>
<h3>全选/全不选/反选练习</h3>
<h4>全选</h4>
<input type="checkbox" id="boxid" οnclick="selectAllOrNone()"/>全选/全不选</br>
<input type="checkbox" name="hobby"/>篮球</br>
<input type="checkbox" name="hobby"/>足球</br>
<input type="checkbox" name="hobby"/>排球</br>
<input type="checkbox" name="hobby"/>冰球</br>
<input type="button" value="全选" οnclick="selectAll()"/>
<input type="button" value="全不选" οnclick="selectNone()">
<input type="button" value="反选" οnclick="selectOpposite()">
<hr/>
<ul id="ulId">
<li>北京</li>
<li id="sh">上海</li>
<li>广州</li>
</ul>
<ul>
<li>小时代1</li>
<li id="sd1">小时代2</li>
<li>小时代3</li>
</ul>
<input type="text" id="id" value="zhangsan"/>
<span id="spanId">我是span的区域</span>
<hr/>
<button id="buttonId">
我是按钮
</button>
<span id="spanId1">span区域</span>
<span id="spanId2"></span>
<hr/>
<h3>获取焦点事件</h3>
输入姓名:<input type="text" name="username" οnfοcus="focus()" οnblur="losefocus()"/><span id="uspan"></span></br>
输入密码:<input type="password" name="password"/><span id="uspan"></span>
</body>
<script type="text/javascript">
/*
思路:
全选:获取名称是hobby的所有input标签
循环遍历,为了拿到每一个input标签,同时,设置checked
*/
function selectAll()
{
//获取名称是hobby的所有input标签
var hobbys=document.getElementsByName("hobby");
for(var i=0;i<hobbys.length;i++)
{
//循环遍历,为了拿到每一个input标签
var hobby=hobbys[i];
//设置checked
//推荐使用,只操作内存中的对象
hobby.checked=true;
//这个方法会在标签上面加上那个属性,而且只要有那个属性,就会选中,不论后面的值设置的是null或者其他
//hobby.setAttribute("checked","checked");
}
}
//全不选
function selectNone()
{
var hobbys=document.getElementsByName("hobby");
for(var i=0;i<hobbys.length;i++)
{
var hobby=hobbys[i];
hobby.checked=false;
//如果上面使用的是setAttribute下面setAttributefalse就没用,必须要使用removeAttribute("checked")才能生效
}
}
//反选
function selectOpposite()
{
var hobbys=document.getElementsByName("hobby");
for(var i=0;i<hobbys.length;i++)
{
var hobby=hobbys[i];
//判断当前标签的checked的值是否为true,为true就取消选中
if(hobby.checked==true)
{
hobby.checked=false;
}
//否则就选中
else
{
hobby.checked=true;
}
//简单操作
//hobby.checked=!hobby.checked;
}
}
function selectAllOrNone()
{
var box=document.getElementById("boxid");
if(box.checked==true)
{
selectAll();
}
else
{
selectNone();
}
}
//================================================================
//var input=document.getElementById("id");
//alert(input.value);
//alert(input.getAttribute("value"));
//input.setAttribute("value","zhaosi");
//alert(input.getAttribute("value"));
//input.removeAttribute("value");
//alert(input.getAttribute("value"));
//=========================================================
//var ul=document.getElementById("ulId");
//之前写成方法去了,没跳出来,其实是属性
//var lis=ul.childNodes;
//alert(lis.length);
//此处的长度包含空格的个数
//var li=ul.getElementsByTagName("li");
//alert(li.length);
//用元素节点调用getElementsByTagName方法,获取到的就是下面所有子节点
//=========================================================
//创建元素对象
//var li=document.createElement("li");
//创建文本对象
//var text=document.createTextNode("深圳");
//把文本对象添加到元素对象下面,作为子节点
//li.appendChild(text);
//获取ul
//var uls=document.getElementsByTagName("ul")[0];
//把元素对象添加到ul下面,作为子节点
//uls.appendChild(li);
//===========================================================
//获得标签的对象
//var input=document.getElementById("id");
//alert(input.nodeName);INPUT
//alert(input.nodeType);1
//alert(input.nodeValue);null
//获得属性的对象
//var attr=input.getAttributeNode("type");
//alert(attr.nodeName);type
//alert(attr.nodeType);2
//alert(attr.nodeValue);text
//获得文本内容
//var span=document.getElementById("spanId");
//var spantext=span.firstChild;
//alert(spantext.nodeName);#text
//alert(spantext.nodeType);3
//alert(spantext.nodeValue);我是span的区域
//var ul=document.getElementById("ulId");
//var li=ul.firstElementChild;
//alert(li.nodeType);
//alert(ul.hasChildNodes());
//alert(ul.hasAttributes());
//点击上海,用小时代2替换上海
//function run()
//{
// alert("heheh");
//}
//document.getElementById("sh").onclick = function()
//{
//var sh=document.getElementById("sh");
//var xsd2=document.getElementById("sd1");
//var ul=sh.parentNode;
//ul.replaceChild(xsd2,sh);
//this关键字,代表当前对象
//var ul=this.parentNode;
//var xsd2=document.getElementById("sd1");
//ul.replaceChild(xsd2,this);
//删除节点
//this.parentNode.removeChild(this);
//var sh=document.getElementById("sh");
//var ul=sh.parentNode;
//ul.removeChild(sh);
//};
//复制button按钮,添加到span标签中间。
//var btn=document.getElementById("buttonId");
//var newBtn=btn.cloneNode(true);
//var span=documents.getElementById("spanId1");
//span.appendChild(newBtn);
//var span=document.getElementById("spanId1");
//alert(span.innerHTML);
//var span2=document.getElementById("spanId2");
//span2.innerHTML="<font color='red'>span2</font>";
//焦点=============================================================
//提示输入的信息
//function focus()
//{
//此处的获取焦点之后一直不能显示,未找到错误原因
// var userspan=document.getElementById("uspan");
// userspan.innerHTML="您只能输入特殊字符";
//}
//function losefocus()
//{
//获取用户输入的姓名
//把用户输入的数据传入到后台,在后台做匹配操作,后台处理完成,返回结果。
// var userspan=document.getElementById("uspan");
// userspan.innerHTML="用户名已存在";
//}
//全选==============================================================
</script>
</html>
记事本里面的笔记腾过来就没有格式了,奇怪了,只有放在代码里面了。
其实前端的方法都不是很难,但是因为太多了,所以用得不输,多练练就好了。
DOM解析HTML
最新推荐文章于 2021-06-16 00:20:47 发布