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>


时间: 2024-08-09 21:59:46

05.DOM的相关文章

2016.01.05 DOM笔记(一)

DOM节点的种类 元素和标签是一个意思,例如<body>标签或者称为<body>元素 节点DOM的节点分为三类  元素节点,文本节点,属性节点 例如 <div id=‘box’>例子</div>  其中元素节点就是指这个div,文本节点就是指‘例子’这个文本,属性节点是指id 查找和定位节点 查找元素JS提供的几种方法: getElementById() document.getElementById()DOM操作必须要等到HTML文档加载完毕才能进行怎样获

快速熟悉 javascript 第一季

最近学习了JavaScript基础知识.写这篇博客主要是把自己学习JavaScript总结了一下,同时希望能带给想学习JavaScript的新手一点启发. 下面简单介绍一下JavaScript是什么东东?它是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言.其中包含三个部分:ECMAScript,文档对象模型,浏览器对象模型.想更清楚的了解JavaScript,自己可以百度一下.概念性的问题,我一般先记下来,慢慢去理解和领悟. 下面呢,我分享一下学习目录. 01. 初探JavaScript

Web前端+移动端全套视频教程

Web前端+移动端全套视频教程|12.小程序|01.小程序.rar|11.Vue|05.Vue实战练习.rar|04.Vue UI框架Element-UI.rar|03.Vue路由.rar|02.Vue网络请求.rar|01.Vue基础.rar|10.React|06.React网络请求Fetch.rar|05.React UI框架Antd.rar|04.React路由4.x.rar|03.React路由3.x.rar|02.React环境搭建.rar|01.React基础.rar|09.前端构

2019微专业初级前端开发工程师教程

目录:┣━━1前端入门┃ ┣━━第1章 前端技术发展概述┃ ┃ ┗━━1前端技术发展概述.mp4┃ ┣━━第2章 微专业课程体系概述┃ ┃ ┗━━2微专业课程体系概述.mp4┃ ┣━━第3章 前端入门案例┃ ┃ ┗━━3前端入门案例.mp4┃ ┣━━第4章 前端开发工具┃ ┃ ┣━━4.1前端开发工具概述.mp4┃ ┃ ┣━━4.2WebStorm.mp4┃ ┃ ┣━━4.2WebStorm参考资料.doc┃ ┃ ┣━━4.3Sublime Text 参考资料.doc┃ ┃ ┣━━4.3Subl

前端05.js入门之BOM对象与DOM对象。

一.关于BOM对象. BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作.使用 BOM,开发者可以移动窗口.改变状态栏中的文本以及执行其他与页面内容不直接相关的动作. 用于操控用户浏览器. 1.window对象: 所有浏览器都支持 window 对象. 概念上讲.一个html文档对应一个window对象. 功能上讲: 控制浏览器窗口的. 使用上讲: window对象不需要创建对象,直接使用即可. 下面是window对象的常用方法: alert()            显示带有一段消息和一

09.05 javascript 属性 内置属性 自定义属性 DOM文档对象模型

# 属性 ### 内置属性 * js对象和html标签有映射关系 ### 自定义属性 * getAttribute() * setAttribute() * hasAttribute() * removeAttribute() ### H5新增的自定义属性操作操作 * HTML:  `<tag data-attr="">` * JS :  element.dataset.attr ### 把属性当做属性节点 * getAttributeNode(attrname) # 元素

JS加强学习-DOM学习05

7.6 移除节点   removeChild() 是将父元素中的某个子节点移除掉:这个为彻底移除. 7.7 插入节点   insertBefore 不同于appendChild(),appendChild()为将指定的元素剪切至对象所有子元素的最后.而insertBefore(,)是将指定的元素插入到某个位置之前,第一个参数为指定的元素,第二个参数为父元素中某个子元素的位置,指定元素会插入到第二个参数位置之前. 8. JS设置样式 8.1 JS设置样式的两种方式 style:逐条获取样式属性,逐

2016/05/12菜鸟自学Dom

编写一个网页上的多选,反选,全选的框子 <!DOCTYPE html><html> <head> <title>Myslcel.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content=&quo

DOM Nodes

An idea of DOM Another document Walking DOM using Developer Tools Whitespace nodes Other node types DOCTYPE Comments Summary The DOM represents a document as a tree. The tree is made up of parent-child relationships, a parent can have one or many chi