javascript初探(三)------DOM

一、概述

  • DOM:当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)
    HTML DOM 模型被构造为对象的树
    在这里插入图片描述
  • 节点图示
    在这里插入图片描述
    • 节点定义(重要):HTML 文档中的所有内容都是节点,整个文档是一个文档节点
    • 节点关系:节点彼此有层级关系,用父(parent)、子(child)和同胞(sibling)等术语来描述这些关系

二、示例模板

  • 代码
    <html>
    
    	<head>
    	    <title>test</title>
    	    <script type="text/javascript">
    	        window.onload = function() {
    				// 以下测试代码都是写在这里
    	        }
    	    </script>
            <style type="text/css">
    	        #city {
    	            width: 100px;
    	            height: 100px;
    	            background-color: red;
    	        }
    	    </style>
    	</head>
    
    	<body>
    	    <ul id="city">
    	        <li class="location">北京</li>
    	        <li>上海</li>
    	        <li>广州</li>
    	    </ul>
            <form action="demo.asp" method="get" id="formid">
    	         性别: 
    	         <input type="radio" name="gender" value="male" /><input type="radio" name="gender" value="female" /><br>
    	         <input id="sub" type="submit" value="Submit" />
    	     </form>
    	</body>
    
    </html>
    
  • 效果如下图
    在这里插入图片描述

三、节点操作

3.1 元素节点

3.1.1 查

  • document对象查找
    // 方法一:
    // 通过ID获取元素:获取<ul>...</ul>这个元素节点(见2.1图)
    const ul_id = document.getElementById("city");
    // 此方法获得[object HTMLUListElement],单个元素节点
    // alert(ul_id);
    
    // 方法二:
    // 通过标签名获取元素:返回的是一个数组,即使只有一个元素节点,[object HTMLCollection]
    const form_tag_list = document.getElementsByTagName("form");
    // 注意数组的调用方法,此处[0]选择了form元素节点
    // alert(form_tag_list[0]);
    
    // 方法三:
    // 通过元素名属性获取元素:返回的是一个数组,即使只有一个元素节点,[object HTMLCollection]
    const class_list = document.getElementsByClassName("location");            
    // 注意数组的调用方法
    // alert(class_list[0])
    
  • 非document对象查找
    // 方法一
    const ul_id = document.getElementById("city");
    // 通用查询:将ul的所有子元素节点组成的数组给cns,即是3个li元素节点
    // 会读取到<br>
    const cns = ul_id.children;
    // 子元素数组长度:输出3
    alert(cns.length);
    // 子元素数组首元素:输出[object HTMLLIElement]
    alert(cns[0]);
    // 数组的父元素:即ul元素节点,输出[object HTMLUListElement]
    alert(cns[2].parentNode)
    
    // 方法二:
    const ul_id = document.getElementById("city");
    // 标签名查询:返回的是一个数组,即使只有一个元素节点
    const li_list = ul_id .getElementsByTagName("li");
    // 注意数组的调用方法,此处[0]选择了li元素节点
    // alert(li_list[0]);
    
    //方法三:
    const ul_id = document.getElementById("city");
    // 类名查询:返回的是一个数组,即使只有一个元素节点
    const li_list = ul_id.getElementsByClassName("location");
    // 注意数组的调用方法,此处[0]选择了li元素节点
    // alert(li_list[0]);
    
  • 查操作:样式选择器法(重点
     // 仅返回第一个查询到的元素节点
     const li_1 = document.querySelector("#city li");
     // alert(li_1.innerHTML);
    
     // 返回符合条件的元素节点列表,即使只有一个
     const li_2 = document.querySelectorAll("#city li");
     // alert(li_2[0].innerHTML);
    
    id名 #nav 
    标签名 div
    类名 .warning
    
    #log span // id为log的后代元素中所有span的元素
    #log>span // id为log的子元素中所有span的元素
    body>h1:first-child	//body标签的子元素中第一个h1标签元素
    div, #log // 所有div元素,以及ID为log的元素
    

3.1.2 增

  • 代码
    // 1、新增元素节点,还可以是li,ul,p,input...
    const btn=document.createElement("button");
    // 2、新增文本节点
    btn.innerHTML = "<strong>点击我</strong>"; 
    
    // 3、将元素节点挂载到DOM树上,必须是父元素节点调用方法
    // 在ul_id末尾追加
    const ul_id = document.getElementById("city");
    ul_id.appendChild(btn);
    // 4、在任意位置插入
    ul_id.insertBefore(btn, ul_id.children[0]); 
    

3.1.3 改删

  • 代码
    // 新增p标签
    const pnode = document.createElement("p");
    pnode.innerHTML = "<i>西藏</i>";
    // 替换操作:父元素调用方法,(待更新元素节点,原元素节点)
    pnode.parentNode.replaceChild(pnode, ulitem.children[0]);
    // 删除操作:父元素调用方法,(待删除元素节点)
    pnode.parentNode.removeChild(ulitem.children[1]);
    

3.2 属性节点_常规

3.2.1 增

  • 代码
    // 创建属性节点
    const attr = document.createAttribute("class");
    const ul_id = document.getElementById("city");
    // 将属性节点挂载到已存在的元素节点,若有则替换,无则新增
    ul_id.setAttribute("class","democlass"); 
    

3.2.2 查

  • 代码
    // 类名法获取元素节点
    const newItem = document.getElementsByClassName("democlass")[0];   
    // 存在这个属性返回true
    let has_attr = newItem.hasAttribute("onclick");
    // 返回属性列表,这里取列表首元素
    let arrt_list = newItem.attributes[0];
    // 返回第一个属性名字:class
    alert(arrt_list.name)
    // 返回第一个属性值:
    alert(arrt_list.value)
    

3.2.3 改

  • 代码
    // 类名法获取元素节点
    const newItem = document.getElementsByClassName("democlass")[0];   
    // 修改元素节点的值,注意元素节点的属性名写法
    newItem.className = "democlass_1";
    // 修改元素节点的文字节点,也可用innerHTML
    newItem.innerText = "再点我";
    

3.2.4 删

  • 代码
    // 类名法获取元素节点
    const newItem = document.getElementsByClassName("democlass")[0];  
    // 通过属性名获取元素节点的属性节点
    let attr = newItem.getAttribute("class");
    // 元素节点调用方法删除属性节点
    newItem.removeAttribute(attr);
    

3.3 属性节点_样式

  • 代码

    const city = document.getElementById("city");
    
    // 读操作
    // 内联样式读取:无法读取样式表中样式,如下输出空
    alert(city.style.width)
    // 获取当前显示的样式列表:只读不可改,返回100px,
    // null可为':before'、':after'
    alert(getComputedStyle(city, null).height)
    
    // 写操作
    // 添加内联样式:若删除则恢复默认的#city样式
    // 优先级最高(除了!important)
    city.style.width = "300px";
    // 样式属性值不能有横杠“-”,需用驼峰表示法
    city.style.backgroundColor = "yellow";
    
  • 样式常用属性

    • 元素boder内边距
      在这里插入图片描述
    • 元素border外边距 在这里插入图片描述
    • 滚动区域被隐藏页面(还有scrollLeft)
      在这里插入图片描述
    • 子盒子顶距父盒子顶距离
      在这里插入图片描述
  • 其他属性(待补充)

    属性释义
    offsetLeft当前元素相对于其定位父元素的水平偏移量
    offsetTop当前元素相对于其定位父元素的垂直偏移量

上一篇:javascript初探(二)------对象及方法
下一篇:javascript初探(四)------事件对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值