2021-08-19 WEB前端课堂笔记Day05

1 DOM(文档对象模型)

DOM为树形结构

作用:

  • JavaScript 能改变页面中的所有 HTML 元素
  • JavaScript 能改变页面中的所有 HTML 属性
  • JavaScript 能改变页面中的所有 CSS 样式
  • JavaScript 能删除已有的 HTML 元素和属性
  • JavaScript 能添加新的 HTML 元素和属性
  • JavaScript 能对页面中所有已有的 HTML 事件作出反应
  • JavaScript 能在页面中创建新的 HTML 事件

分类:

  • Core DOM - 所有文档类型的标准模型
  • XML DOM - XML 文档的标准模型
  • HTML DOM - HTML 文档的标准模型

节点:Node - 构成HTML文档的最基本单元

节点分类:

  • 文档节点:整个HTML文档
  • 元素节点:HTML中的HTML标签
  • 属性节点:元素的属性
  • 文档节点:HTML标签中的文本内容

查找HTML元素:

在这里插入图片描述

//window.onload 等待整个页面的HTML元素加载结束之后 在执行
window.onload=function(){
    // 根据元素的ID属性来获取元素
    var  bd = document.getElementById("bd");
    alert(bd);
    //根据标签名获取
    var  h1 = document.getElementsByTagName("h1");
    alert(h1.length);
    //根据类名来获取
    var h = document.getElementsByClassName("h");
    alert(h.length);
    // 根据name属性来获取
    var  hh = document.getElementsByName("hh");
    alert(hh.length);
}

节点关系:

  • 父节点
  • 子节点
  • 兄弟节点

2 节点的访问

属性名称描述
parentNode返回结点的父节点
childNodes返回子节点集合
firstChild返回结点的第一个子节点 最常用的用法就是获取该元素的文本节点
lastChild返回节点的最后一个子节点
nextSibling返回下一个结点
previousSibling返回上一个结点
//window.onload 等待整个页面的HTML元素加载结束之后 在执行
window.onload=function(){
    var obj = document.getElementById("news");
    //获取当前元素的子节点   访问可以通过node[i]
    var node = obj.childNodes[1];
  //  console.log(node );
    //获取当前元素的第一个子节点
    var firstNode= obj.firstChild.firstChild.nextSibling.textContent;
    //console.log(firstNode);
    var lastNode = obj.lastChild.firstChild.nextSibling.nextSibling.nextSibling.innerText;
    //console.log(lastNode);
}

innerHTML:获取当前节点的HTML内容

innerText:获取当前节点的文本内容

新的属性 element 属性

属性描述
fistElementChild返回节点的第一个子节点
lastElementChild返回节点的最后一个子节点
nextElementSibling返回下一个子节点
previousElementSibling返回上一个子节点
//window.onload 等待整个页面的HTML元素加载结束之后 在执行
window.onload=function(){
    var obj = document.getElementById("news");
// 兼顾新旧语法
    var elementNode = obj.lastElementChild.firstElementChild.nextElementSibling.innerText ||obj.lastChild.firstChild.nextSibling.nextSibling.innerText;
    console.log(elementNode)
}

3 节点信息

  • nodeName : 节点名称
  • nodeValue : 节点值
  • nodeType : 节点类型
节点类型NodeType的值
元素element1
属性attr2
文本text3
注释comments8
文档document9

3.1 nodeValue 属性

nodeValue 属性规定节点的值。

  • 元素节点的 nodeValue 是 undefined 或 null
  • 文本节点的 nodeValue 是文本本身
  • 属性节点的 nodeValue 是属性值
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/node.js"></script>
</head>
<body>
    <div id="box"  style="width: 200px; height: 200px; border: 1px solid black; background-color: antiquewhite;">
            这是一个div盒子
    </div>
    <ul id="u" name="ul">
        ultext
        <li>西瓜</li>
        <li>橙子</li>
        <li>柠檬</li>
    </ul>
</body>
</html>
window.onload=function(){
    // 获取元素节点
    var div = document.getElementById("box");
    console.log(div.nodeName+"---"+div.nodeType+"--"+div.nodeValue);//DIV---1--null
    var ul = document.getElementById("u").firstChild;
    console.log(ul.nodeName+"---"+ul.nodeType+"--"+ul.nodeValue);//#text---3--ultext
    // 获取属性节点
    var attr =  document.getElementById("u").getAttributeNode("name");  
    console.log(attr.nodeName+"---"+attr.nodeType+"--"+attr.nodeValue);//name---2--ul
}

4 节点操作

  • 操作节点的属性
  • 创建和插入节点
  • 删除和替换节点
  • 操作节点样式
  • 获取元素的样式

4.1 操作节点属性

  • getAttribute(“属性名”) 获取该属性名对应的属性值
  • setAttribute(“属性名”,“属性值”) 给该属性赋值
function book(){
     var  radio = document.getElementsByName("book");
     var img = document.getElementsByTagName("img")[0];
     if(radio[0].checked){
        img.setAttribute("src","images/dog.jpg");
        img.nextElementSibling.innerHTML="<h3>"+radio[0].nextElementSibling.textContent+"</h3>";
        img.setAttribute("alt",radio[0].nextElementSibling.textContent);
     }else{
        img.setAttribute("src","images/mai.jpg");
        img.nextElementSibling.innerHTML="<h3>"+radio[1].nextElementSibling.textContent+"</h3>"
        img.setAttribute("alt",radio[1].nextElementSibling.textContent);
     }

}
function img(){
    var img = document.getElementsByTagName("img")[0];
    var alt = img.getAttribute("alt");
    alert(alt);
}

4.2 创建节点

方法描述
createElement(tagName)创建一个标签名为tagName的新元素节点
A.appendChild(B)把B节点追加到A节点的末尾
insertBefore(A,B)把A 节点插入到B节点之前
cloneNode(deep)赋值某个指定的接地 deep 是否深度赋值
function book(){
     var  radio = document.getElementsByName("book");
     var img = document.getElementsByTagName("img")[0];
     var div0 = document.getElementsByTagName("div")[0];
     if(radio[0].checked){
        img.setAttribute("src","images/dog.jpg");
        img.nextElementSibling.innerHTML="<h3>"+radio[0].nextElementSibling.textContent+"</h3>";
        img.setAttribute("alt",radio[0].nextElementSibling.textContent);
        var newDiv = document.createElement("div");
        var newImg = document.createElement("img");
        newImg.setAttribute("src","images/dog.jpg");
        newDiv.append(newImg);
        div0.append(newDiv);

     }else{
        img.setAttribute("src","images/mai.jpg");
        img.nextElementSibling.innerHTML="<h3>"+radio[1].nextElementSibling.textContent+"</h3>"
        img.setAttribute("alt",radio[1].nextElementSibling.textContent);
     }

}
function img(){
    var img = document.getElementsByTagName("img")[0];
    var div0 = document.getElementsByTagName("div")[0];
    var alt = img.getAttribute("alt");

    var clone = img.cloneNode(false);
    var newDiv = document.createElement("div");//赋值一个节点
    // newDiv.append(clone);
   div0.append(newDiv); 
}

获取元素的内容:

  • textContent:获取当前元素及其后代所有元素的文本内容
  • innerHTML: 获取当前节点所包含的html元素
  • innerText:获取当前节点内的文本内容 不包含后代

4.3 删除和替换节点

方法名描述
removeChild(delNode)删除指定的节点(只能由其父节点删除)
replaceChild(newNode ,oldNode)用新节点替换旧节点
function del(){
    var delNode = document.getElementById("first");
    // 删除的时候 需要其父节点来删除
    delNode.parentNode.removeChild(delNode);
}
function rep(){
    var  oldNode = document.getElementById("second");
    var newNode = document.createElement("img");
    newNode.setAttribute("src","images/f03.jpg");
    oldNode.parentNode.replaceChild(newNode,oldNode);
}

4.4 操作节点样式

改变样式属性:

  • style属性
  • className属性
// html元素.style.样式属性=“值”
window.onload=function(){
   document.getElementById("cart").style.color="#ff0000"
   document.getElementById("cart").style.fontSize="25px";
}
类别属性
背景backgroundColor backgroundImage backgroundRepeat
文本fontSize fontWeight textAlign color font
边距padding paddingTop paddingBottom
边框border BorderTop BorderLeft BorderRight

常见事件:

事件名称描述
onclick当用户点击某个对象时调用的事件
onmouseover鼠标移动到某个元素之上
onmouseout鼠标从某个元素移开
onmousedown鼠标按钮按下事件
onmouseup鼠标按钮弹起事件

改变类名

// html元素.className="样式名称"
 function over(){
    var cart = document.getElementById("cart");
    cart.className="cartOver";
    document.getElementById("cartList").className="cartListOver";
 }
 function out(){
   document.getElementById("cart").className="cartOut";
   document.getElementById("cartList").className="cartListOut";
 }

获取样式

// html元素.style.样式属性
 console.log(document.getElementById("post").style.width );//获取内联样式
// 既可以获取到外部样式表的样式 也可以获取到内联样式  内部样式  获取的值与样式的优先级有关
console.log(document.defaultView.getComputedStyle(document.getElementById("post"),null).width);
//IE浏览的写法  了解
document.getElementById("post").currentSytle.width

4.5 获取元素位置

属性描述
offsetLfet返回当前元素左边界到它上级元素的左边界的距离 只读属性
offsetTop返回当前元素上边界到它上级元素的上边界的距离 只读属性
offsetHeight返回元素的高度
offsetWidth返回元素的宽度
offsetParent返回元素的偏移容器 即对最近的动态定位的包含元素的引用
scrollTop返回匹配元素的滚动条的垂直位置
scrollLeft返回匹配元素的滚动条的水平位置
clientWidth返回元素的可见宽度
clientHeight返回元素的可见高度
    // 旧的写法
    console.log(document.body.scrollTop+"---"+document.body.scrollLeft);
    // 标准写法
    console.log(document.documentElement.scrollTop+"---"+document.documentElement.scrollLeft);
<!DOCTYPE html>
<html>

<head lang="en">
	<meta charset="UTF-8">
	<title>随鼠标滚动的广告图片</title>
	<style type="text/css">
		#main {
			text-align: center;
			width: 1014px;
			margin: 0 auto;
		}

		#adver {
			position: absolute;
			left: 10px;
			top: 30px;
			z-index: 2;
		}
	</style>

</head>

<body>
	<div id="adver"><img src="images/adv.jpg" /></div>
	<div id="main"><img src="images/main1.jpg" /><img src="images/main2.jpg" /><img src="images/main3.jpg" /></div>

	<script>
		var adverTop; //广告层距页面顶端距离
		var adverLeft;//广告层距离左端的距离
		var adverObj; //广告层对象
		function inix() {//兼容了IE浏览和其他标准浏览器
			adverObj = document.getElementById("adver"); //获得层对象
			if (adverObj.currentStyle) {
				adverTop = parseInt(adverObj.currentStyle.top);
				adverLeft = parseInt(adverObj.currentStyle.left);
			} else {
				adverTop = parseInt(document.defaultView.getComputedStyle(adverObj, null).top);
				adverLeft = parseInt(document.defaultView.getComputedStyle(adverObj, null).left);
			}
		}

		function move() {
			var sTop = parseInt(document.documentElement.scrollTop || document.body.scrollTop);
			var sLeft = parseInt(document.documentElement.scrollLeft || document.body.scrollLeft);
			adverObj.style.top = adverTop + sTop + "px";
			adverObj.style.left = adverLeft + sLeft + "px";
		}
		window.onload = inix;
		window.onscroll = move;
	</script>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于北邮-2021-软件工程-期末复习.rar,其实际内容应该包含了北邮软件工程课程的期末复习相关资料。这些资料可能包括了课堂讲义、考试重点、习题解答、历年试卷等内容,有助于帮助学生复习和准备考试。此外,该压缩文件可能也包含了一些软件工程方面的技术文献、著作或工具等资源,供学生自行查阅和学习。 软件工程是计算机科学的一个重要分支,旨在研究关于软件的开发、管理和维护等方面的最佳实践和方法。在学习软件工程的过程中,需要不断运用各种工具和技术,例如需求分析、设计模式、测试驱动开发、代码版本管理等。因此,掌握软件工程技能对于未来从事软件开发的工程师和研究者来说都是非常重要的。 总之,北邮-2021-软件工程-期末复习.rar是一个包含了软件工程课程复习相关资料的压缩文件,对于学习软件工程的同学们来说,它是一份宝贵的资源。在复习过程中,我们需要认真审核其中的内容,结合课堂实际情况,制定个人化的复习计划,不断加强基础知识的掌握,并结合实际应用,提高自己的软件开发能力。 ### 回答2: 北邮-2021-软件工程-期末复习.rar文件是北邮2021年软件工程课程的期末复习资料压缩包。其中包含了软件工程课程相关的学习资料和复习材料。在这个压缩包中,可能包括课件、PPT、习题和答案、教材、参考书籍、课程大纲等等。这些材料都是为了帮助学生进行软件工程课程的有效学习和备考复习所准备的。 该压缩包的目的是为学生提供一个集中、整理好的资源库,方便学生在期末复习阶段能够迅速找到所需资料。通过使用该压缩包,学生可以更加高效地进行软件工程知识的巩固和回顾,更好地理解和掌握课程中的关键概念和技术。 对于学生而言,打开这个压缩包后,可以根据自己的需要选择具体的学习材料进行查阅和使用。同时,也可以根据课程大纲或者考试的重点,有针对性地进行复习,并通过做习题巩固知识。 总之,北邮-2021-软件工程-期末复习.rar是一份为学生提供软件工程课程复习资料的压缩包,通过使用其中的学习资料,学生可以更加高效地进行软件工程知识的复习和巩固,为期末考试做好准备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值