05.DOM
DOM基础
什么是DOM 标签元素节点
浏览器支持情况 火狐支持最好 谷歌其次 ie最差 尤其是ie6-8
DOM节点
节点分为:元素节点和文本节点 测试节点的类型用nodeType
nodeType 为3时是文本节点
nodeType 为1时是元素节点
childNodes 节点 不兼容要做判断 一般用children
children子节点只算第一层
parentNode父节点
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script>
window.onload=function ()
{
var aA=document.getElementsByTagName('a'); for(var i=0;i<aA.length;i++)
{
aA[i].onclick=function ()
{
this.parentNode.style.display='none';
};
}
};
</script>
</head> <body>
<ul id="ul1">
<li>dfasdf <a href="javascript:;">隐藏</a></li>
<li>45346 <a href="javascript:;">隐藏</a></li>
<li>fghfgcvn <a href="javascript:;">隐藏</a></li>
<li>vcbxcvbc <a href="javascript:;">隐藏</a></li>
<li>757465867 <a href="javascript:;">隐藏</a></li>
</ul>
</body>
</html>
offsetParent
获取对应定位的父元素
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
#div1 {width:200px; height:200px; background:#CCC; margin:100px; }
#div2 {width:100px; height:100px; background:red; position:absolute; left:50px; top:50px;}
</style>
<script>
window.onload=function ()
{
var oDiv2=document.getElementById('div2'); alert(oDiv2.offsetParent);//弹出的是object HTMLBodyElement 因为div1没有设置相对定位,所以div2是相对body定位的
};
</script>
</head> <body>
<div id="div1">
<div id="div2"></div>
</div>
</body>
</html>
首尾子节点 有兼容性问题
firstChild、firstElementChild
lastChild 、lastElementChild
兄弟节点 有兼容性问题
nextSibling、nextElementSibling
previousSibling、previousElementSibling
<script>
window.onload=function ()
{
var oUl=document.getElementById('ul1'); //IE6-8
//oUl.firstChild.style.background='red'; //高级浏览器
//oUl.firstElementChild.style.background='red'; if(oUl.firstElementChild)
{
oUl.firstElementChild.style.background='red';
}
else
{
oUl.firstChild.style.background='red';
}
};
</script>
<ul id="ul1">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
元素属性操作
第一种:oDiv.style.display=“block”;
第二种:oDiv.style[“display”]=“block”;
第三种:Dom方式
DOM方式操作元素属性
获取:getAttribute(名称)
设置:setAttribute(名称, 值)
删除:removeAttribute(名称)
<script>
window.onload=function ()
{
var oTxt=document.getElementById('txt1');
var oBtn=document.getElementById('btn1');
oBtn.onclick=function ()
{
//oTxt.value='123';
//oTxt['value']='123';
oTxt.setAttribute('value', '123');
};
};
</script>
<input id="txt1" type="text" />
<input id="btn1" type="button" value="按钮" />
用className选择元素
如何用className选择元素
选出所有元素
通过className条件筛选
封装成函数
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script>
function getByClass(oParent, sClass)
{
var aResult=[];
var aEle=oParent.getElementsByTagName('*'); for(var i=0;i<aEle.length;i++)
{
if(aEle[i].className==sClass)//找到所有要找的class
{
aResult.push(aEle[i]);//放进数组里
}
} return aResult;
} window.onload=function ()
{
var oUl=document.getElementById('ul1');
var aBox=getByClass(oUl, 'box'); for(var i=0;i<aBox.length;i++)
{
aBox[i].style.background='red';
}
};
</script>
</head> <body>
<ul id="ul1">
<li class="box"></li>
<li class="box"></li>
<li></li>
<li></li>
<li></li>
<li class="box"></li>
<li></li>
</ul>
</body>
</html>
创建、插入和删除元素
createElement(标签名) 创建一个节点
appendChild(节点) 追加一个节点
插入元素 insertBefore(节点, 原有节点) 在已有元素前插入
例子:倒序插入li
删除DOM元素
removeChild(节点) 删除一个节点 例子:删除li
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script>
window.onload=function ()
{
var aA=document.getElementsByTagName('a');
var oUl=document.getElementById('ul1'); for(var i=0;i<aA.length;i++)
{
aA[i].onclick=function ()
{
oUl.removeChild(this.parentNode);
};
}
};
</script>
</head> <body>
<ul id="ul1">
<li>asfasd <a href="javascript:;">删除</a></li>
<li>5645 <a href="javascript:;">删除</a></li>
<li>ghdfjgj <a href="javascript:;">删除</a></li>
<li>mvbnmvnb <a href="javascript:;">删除</a></li>
</ul>
</body>
</html>
串联例子
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script>
window.onload=function ()
{
var oBtn=document.getElementById('btn1');
var oUl=document.getElementById('ul1');
var oTxt=document.getElementById('txt1'); oBtn.onclick=function ()
{
var oLi=document.createElement('li');//创建li
var aLi=oUl.getElementsByTagName('li'); oLi.innerHTML=oTxt.value; //父级.appendChild(子节点);
//oUl.appendChild(oLi);
if(aLi.length>0)//判断存不存在第一个节点
{
oUl.insertBefore(oLi, aLi[0]);//存在插入之前元素的 前面
}
else
{
oUl.appendChild(oLi);//不存在直接插入父元素
}
};
};
</script>
</head> <body>
<input id="txt1" type="text"/>
<input id="btn1" type="button" value="创建li"/>
<ul id="ul1">
</ul>
</body>
</html>
文档碎片 文档碎片可以提高DOM操作性能(理论上) 文档碎片原理 document.createDocumentFragment()
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script>
window.onload=function ()
{
var oUl=document.getElementById('ul1');
var oFrag=document.createDocumentFragment(); for(var i=0;i<10000;i++)
{
var oLi=document.createElement('li'); oFrag.appendChild(oLi);
} oUl.appendChild(oFrag);
};
</script>
</head> <body>
<ul id="ul1">
</ul>
</body>
</html>
05.DOM的更多相关文章
- 2016.01.05 DOM笔记(一) 查找元素
DOM节点的种类 元素和标签是一个意思,例如<body>标签或者称为<body>元素 节点DOM的节点分为三类 元素节点,文本节点,属性节点 例如 <div id=‘b ...
- 自定义属性,innerHTML,outerHTML,dom节点的获取,className,tagName,更改或者是获取css属性
01.自定义属性 1.自定义属性: 作用:保存数据 通用的自定义属性的前缀 data-属性="属性值" 注:自定义的属性不能通过 元素.属性 取属性值 ,需使用getAttribu ...
- 20 个使用原生 JavaScript 实现的 Web 项目
20 个使用原生 JavaScript 实现的 Web 项目 20 vanilla JavaScript Web Projects https://github.com/learning-js-by- ...
- 05浏览器-02-操作DOM
1.DOM操作梗概 本篇内容实际上在另一篇笔记<从JS和jQuery浅谈DOM操作>已经提到了重点的地方,可以戳链接另外进行阅读. 以前提到过,实际上HTML在被浏览器加载以后,会变成 & ...
- 05 JS基础DOM
JS的window对象定时器: window下一些方法: <script> 弹出 window.alert('hello') 返回布尔值 var ret = window.confirm( ...
- 05 javascript知识点---BOM和DOM
1.DOM简单学习(为了满足案例要求) 功能:控制html文档的内容获取页面标签(元素)对象:Element document.getElementById("id值"):通过元素 ...
- JavaScript学习05(操作DOM)
操作DOM DOM(文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被结构化为对象树: 通过这个对象模型,Java ...
- 05 BOM与DOM
BOM和DOM 1. 什么是BOM和DOM 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的 ...
- SAX与DOM
http://www.cnblogs.com/zhulin/archive/2012/05/03/2480962.html 在解析xml时(如浏览器解析html标签),主要存在两种方式:SAX模式和D ...
随机推荐
- 在SharePoint 2013 Wiki Page中使用用户选择对话框
JS部分: <script type="text/javascript"> function PeoplePicker() { var siteCollUrl = _s ...
- Cocos2dx
初玩Cocos2dx,多多包涵. 感觉版本之间的差异比较大,相对前面的版本来说,3.X更容易上手,更方便了. 一.安装python.我的python-2.7.3.配置环境变量 系统变量里:在Path里 ...
- 游戏的套路你知道吗? H5 Canvas刮刮乐
玩游戏的人 很多时候都会遇到翻牌子 开宝箱. 总有人傻傻的在哪里还纠结很久到底点哪一个! 纠结 指不定翻哪一个会多一点,你明明看到那个卡片的奖项多 . 那我就告诉你好了 其实很多时候在你点开那个 ...
- Position属性四个值:static、fixed、absolute和relative的区别和用法
Position属性四个值:static.fixed.absolute和relative的区别和用法 在用CSS+DIV进行布局的时候,一直对position的四个属性值relative,absolu ...
- 如何在eclipse中通过Juit进行单元测试
1.什么是Junit Junit即单元测试,是JAVA语言的单元测试框架,是对程序的一个方法所进行的测试 一般都是由程序员自己通过Junit来进行测试,因此单元测试也叫程序员测试: 如果测试人员熟悉程 ...
- Yii 1开发日记 -- 搜索功能及Checkbox的实现
用yii 1实现后台的搜索功能,效果如下图: 1.模型中: public function search() { $criteria = new CDbCriteria; //独立高级搜索 if(is ...
- Centos挂载第二块硬盘
作为一个初创小公司的架构师,工作内容纷繁复杂,涉及了系统管理员.数据库管理员.架构师.高级软件工程师.项目经理的部分. 今天的任务是安装公司的服务器,使用centos6.7.安装过程就不用细讲了. ...
- C++开始前篇,深入编译链接
C++开始,为什么要写这个东西,因为按照课堂进度的话,现在的C++已经学到模板以及重载了,有时却仍然因为一些小问题无法解答,原因是忘记了开始时学到的知识,深知不能像猴子掰棒子一样,掰一个扔一个,因此, ...
- PHP中的date()函数
d 月份中的第几天,有前导零的 2 位数字 01 到 31 D 星期中的第几天,文本表示,3 个字母 Mon 到 Sun j 月份中的第几天,没有前导零 1 到 31 l ("L&q ...
- java Clone 的心得记录
我看有些类并没有实现Cloneable接口,这种情况下调用clone()方法也不try catch也不throws: 但是如果我自己这样搞,也不实现Cloneable,接口,直接调用clone()方法 ...