JavaScript—DOM(文档对象模型)

news2025/1/23 13:15:03

目录

DOM是什么?

DOM有什么作用?

一、事件

理解事件

事件怎么写(要做什么就写什么)?

实战演练

1、页面加载完毕以后,打印一句话

2、如果有一个a标签,并给其添加一个点击事件

3、事件默认处理程序

二、对节点进行增删改查

节点是有类型(文件节点,元素节点,属性节点)

为节点添加事件的方法

如何获得节点?

1、获取元素的方法:

2、获取节点的属性与子节点

属性(如果是元素节点,那么它可以有子节点)

①、创建属性节点

②、修改节点

响应式编程

③、添加节点

第一步、创建节点

第二步、追加节点

④、删除节点

实战

由json对象创建一个table表格

无刷新评论

内嵌样式与生成的dom节点


理解DOM

<html>
	<head>
		<title></title>
	</head>
	<body>
		<p>
			今天天气<span style="color:red;font-size:30px">很好</span>,昨天很冷……
		</p>
	</body>
</html>

只要换行了,就是空文本节点

DOM是什么?

文档对象模型

DOM有什么作用?

每个元素是一个对象,对象就是一个节点

通过DOM可以访问JavaScript HTML文档的所有元素,为这些对象动态的添加事件


一、事件

理解事件

节点就是对象

onload事件(Form1_Load)

页面的DOM结构加载完毕后会触发这个事件

事件怎么写(要做什么就写什么)?

  • C#事件就是一个委托变量(事件的编程概念)
  • JavaScript就是方法(给某个标签添加事件就自动触发相应的方法,比方说页面完成加载、input字段改变时、按钮被点击,事件被触发都可以执行一些代码)

描述性概念

浏览器的底层也会有很多出发函数的机制

If(onload != null){ 
	onload();
}

如果鼠标点击一个div
if(div.onclick !=null) {
	div.onclick();
}

实战演练

1、页面加载完毕以后,打印一句话

<html>
        <head>
                <title></title>
                <style type="text/css">			
                
                </style>
                <script type="text/javascript">
                        onload = function(){
                                alert("Hello World,页面终于加载完毕了……");
                        };
                        
                        var foo = function(){
                                alert("我是一个函数");
                        };
                </script>
        </head>
        <body>
                邓礼梅
                <input type="button" value="点击" onclick="foo()"/>
        </body>
</html>

2、如果有一个a标签,并给其添加一个点击事件

你的事件没有返回值或返回true那么a标签会直接跳转

否则就会停止执行默认操作

在发现点击a标签的时候,浏览器内部会执行

if(a.onlick != null ) {
  Var res = a.onclick;
  If(res === false) {
  	break;  //默认的正常跳转就不做了
  }
}
<html>
        <head>
                <title></title>
                <style type="text/css">			
                
                </style>
                <script type="text/javascript">
                        var foo = function(){
                                alert("准备跳转");
                                return false;   //如果a标签写了return这里不写的话,程序不执行
                        };
                </script>
        </head>
        <body>
                <a href="https://www.baidu.com/" onclick="return foo();">点击</a>  //return 点击事件的返回值,链接不跳转
        </body>
</html>

如果事件处理函数,返回了false表示这个事件默认不跳转

3、事件默认处理程序

<html>
        <head>
                <title></title>
                <style type="text/css">			
                
                </style>
                <script type="text/javascript">
                        
                </script>
        </head>
        <body>
                <form>
                        <input type="text" value="123" /><br />
                        <input type="text"  /><br />
                        <input type="text"  /><br />
                        <input type="text"  /><br />
                        <input type="text"  /><br />
                        <input type="text"  /><br />
                        <input type="text"  /><br />
                        <input type="text"  /><br />
                        <input type="reset" onclick="return confirm('您确定要重新输入么');" /><br />
                </form>
        </body>
</html>

confirm:弹出提示选择框


二、对节点进行增删改查

节点是有类型(文件节点,元素节点,属性节点)

标准DOM定义中有12种:元素节点 1 (标签节点,有子节点)

文本节点 3 (没有子节点)

属性节点 2 (没有子节点)

获得方式

<node>.nodeType

为节点添加事件的方法

<node>.onclick = function( ) { };

有什么不同?

  • 原来:在标签中定义onclick事件
  • 现在:在script代码块中通过document对象的方法获取标签id,去执行相应的事件

如何获得节点?

1、获取元素的方法:

document.get……

  • 节点对象document.getElementById(“id的字符串”):获得页面中指定id的节点对象
  • 节点集合document.getElementsByTagName("标签名"):获得页面中所有标签名符合要求的标签
  • 节点集合父节点.getElementsByTagName("标签名"):获得指定父节点下的所有名字符合要求的节点
<html>
        <head>
                <title></title>
                <style type="text/css">			
                
                </style>
                <script type="text/javascript">
                        onload = function(){
                                //页面加载完成后,才会有节点对象可以被访问到
                                //document.getElementById:返回一个指定id属性值为btn的对象
                                var btn = document.getElementById("btn");
                                btn.onclick=function(){
                                        //事件本身
                                        alert("点击了");
                                };
                        };
                </script>
        </head>
        <body>
                <input type="button" value="点击" id="btn"/>
        </body>
</html>

点击事件批处理

<html>
        <head>
                <title></title>
                <style type="text/css">			
                
                </style>
                <script type="text/javascript">
                        onload = function(){
                                var dv = document.getElementById("dv");
                                var links=dv.getElementsByTagName("a");
                                for(var i = 0; i<links.length;i++){
                                        links[i].onclick = function(){
                                                return false;
                                        };
                                };
                        };
                </script>
        </head>
        <body>
                <div id ="dv">
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                </div>
                <hr />
                <div>
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                </div>
        </body>
</html>	

2、获取节点的属性与子节点

属性(如果是元素节点,那么它可以有子节点)

  • <node>.childNodes 获得节点下的所有子节点
  • <node>.firstChild <node>.childNodes[0]
  • <node>.lastChild <node>.childNodes[<node>].childNodes.length-1]

Nodes[i].nodeName 获取第i个节点的名字

<html>
        <head>
                <title></title>
                <style type="text/css">			
                
                </style>
                <script type="text/javascript">
                        onload = function(){
                                //先要获得dv元素
                                var dv = document.getElementById("dv");
                                //获得下面的所有a标签
                                //dv.childNodes
                                var nodes = dv.childNodes;
                                
                                var _ = 0;
                        };
                </script>
        </head>
        <body>
                <div id ="dv">
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                        <a href="https://www.baidu.com/">传智播客</a><br />
                </div>		
        </body>
</html>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
                <title></title>
                <style type="text/css">
                        
                </style>
                <script type="text/javascript">
                        onload = function(){			
                                var dv = document.getElementById("dv");
                                var nodes = dv.childNodes;
                                //获取下标为1的标签类型及标签名
                                alert(nodes[1].nodeType +"," +nodes[1].nodeName);  
                        };
                </script>
        </head>
        <body>
                <div id="dv">
                        <input type="button" value="点击" id="btn" />
                </div>
        </body>
</html>

①、创建属性节点

document.createAttribute(name)

创建一个名叫align,值为center的属性节点
Var attr = document.createAttribute("align")
Attr.value= "center";

②、修改节点

所谓的修改节点就是修改节点的属性与包含的文本

获得节点

修改属性的标准方法(DOM-Core)

  • <node>.setAttribute("属性名","值"); //设置属性值
  • 文本<node>.getAttribute("属性名"); //读取属性值

DOM-html

<node>.属性名 = 值;

var v =<node>.属性名;

<节点>.style.成员=……

<html>
        <head>
                <title></title>
                <style type="text/css">			
                
                </style>
                <script type="text/javascript">
                        onload = function(){				            //窗体加载
                                var btn = document.getElementById("btn");   //获取按钮节点对象
                                        
                                btn.onclick=function(){                     //给按钮添加点击事件
                                        var txtNode = document.getElementById("txt");   //获取文本域的节点对象
                                        var txt =txtNode.value;                         //获取节点对象的属性值
                                        var p = document.getElementById("p");           //获取p标签的节点对象
                                        p.setAttribute("style",txt);                    //给p节点对象设置属性值
                                };
                        };
                </script>
        </head>
        <body>
                <p id = "p">这是一个测试文本</p>                                //文本标签,有一个名叫p的id
                <textarea id="txt" style="width:400px;height:300px;"></textarea> //文本域
                <br />
                <input type="button" value="点击" id="btn" />    //按钮
        </body>
</html>

Style="width:80%;" //跟随浏览器的大小变化大小

响应式编程

③、添加节点

第一步、创建节点

元素节点:var node = document.createElement("标签名");

文本节点:var textNode = document.createTextNode("文本");

<节点>.innerHTML="文本"; //这里可以使用html

<节点>.innerText="文本"; //非标准。少用innerHTML。专门针对复杂的标签结构

属性节点:<节点>.setAttribute(……,……);

标准方法,符合xml规范,可以添加任意的属性

<a href="……" jk="jk">测试</a>

aNode.jk ="jk"; //部分浏览器是可以的

第二步、追加节点

追加到尾部:父节点.appendChild(子节点);

插入到中间(插入到某一个元素的前面):父节点.insertBefore(新元素,旧元素);

插入元素节点
<html>
        <head>
                <title></title>
                <style type="text/css">			
                
                </style>
                <script type="text/javascript" src="C:\Users\denglimei\Desktop\J.js"></script>
                <script type="text/javascript" scr>
                        onload = function(){
                                //获取两个元素
                                var ul=J("ul");   
                                var li=J("li");
                                
                                //创建li标签
                                var newLi= document.createElement("li");
                                //在li中添加文本
                                newLi.innerHTML="添加的测试点";
                                //插入
                                ul.insertBefore(newLi,li)
                        };
                </script>
        </head>
        <body>
                <ul id="ul">
                        <li>测试1</li>
                        <li id="li">测试2</li>
                        <li>测试3</li>
                </ul>
        </body>
</html>

实战:

元素节点:var node = document.createElement("标签名");

<html>
        <head>
                <title></title>
                <style type="text/css">			
                
                </style>
                <script type="text/javascript">
                        var J = function(id){
                                return document.getElementById(id);   //获取所有id节点对象
                        };
                        onload =function(){            //窗体加载事件
                                var btn =J("btn");         //获取元素
                                btn.onclick =function(){  //按钮加载事件
                                        var dv=J("dv");
                                        //创建标签
                                        var img = document.createElement("img");
                                        //追加标签
                                        img.src="C:\Users\denglimei\Desktop\1.jpg";
                                        //追加标签
                                        dv.appendChild(img);
                                        
                                        //创建一个换行
                                        var br = document.createElement("br");
                                        //追加标签
                                        dv.appendChild(br);
                                };
                        };
                </script>
        </head>
        <body>
                <input type="button" value="点击添加" id="btn" />
                <div id="dv"></div>
        </body>
</html>

文本节点:var textNode = document.createTextNode("文本");

<节点>.innerHTML="文本"; //这里可以使用html

<节点>.innerText="文本"; //非标准。少用innerHTML。专门针对复杂的标签结构

	<html>
	        <head>
	                <title></title>
	                <style type="text/css">			
	                
	                </style>
	                <script type="text/javascript" src="C:\Users\denglimei\Desktop\J.js"></script>
	                <script type="text/javascript">
	                        onload = function(){
	                                var bd=J("bd");    //获取body节点对象
	                                
	                                <!-- //第一种方法 -->
	                                <!-- //创建p标签 -->
	                                <!-- var p = document.createElement("p"); -->
	                                <!-- //在p中添加文本 -->
	                                <!-- p.innerHTML='今天天气<span style="color:red">真好</span>呀'; -->
	                                <!-- //追加节点 -->
	                                <!-- bd.appendChild(p); -->
	                                
	                                //第二种方法:利用创建节点的做法
	                                //创建标签p
	                                var p = document.createElement("p");
	                                //创建第一个文本节点
	                                var txt1=document.createTextNode("今天天气");
	                                //创建第二个标签节点
	                                var span = document.createElement("span");
	                                //设置标签的样式
	                                span.style.color="red";
	                                //创建span里面的文本
	                                var txt2=document.createTextNode("很好");
	                                //将文本追加到span中
	                                span.appendChild(txt2);
	                                //创建最后一个文本标签
	                                var txt3=document.createTextNode(",我很热……");
	                                
	                                //追加到p中
	                                p.appendChild(txt1);
	                                p.appendChild(span);
	                                p.appendChild(txt3);
	                                
	                                bd.appendChild(p);
	                        };
	                        
	                        //应该选择哪种?
	                        //如果比较少选择上面
	                        //如果是大面积拼接选择下面的
	                </script>
	        </head>
	        <body id="bd">
	                
	        </body>
	</html>

属性节点:<节点>.setAttribute(……,……);

标准方法,符合xml规范,可以添加任意的属性

<a href="……" jk="jk">测试</a>

aNode.jk ="jk"; //部分浏览器是可以的

④、删除节点

父节点.removeChild(子节点);

<html>
        <head>
                <title></title>
                <style type="text/css">			
                
                </style>
                <script type="text/javascript" src="C:\Users\denglimei\Desktop\J.js"></script>
                <script type="text/javascript" scr>
                        onload = function(){
                                var body=J("body");
                                var p=J("p");
                                //第一种方法
                                body.removeChild(p);   //父节点.
                                
                                //第二种方法:现在大多这样使用
                                p.style.display="none";
                        };
                </script>
        </head>
        <body id="body">
                <p>1111111111</p>
                <p id="p">22222222222</p>
                <p>33333333333</p>
        </body>
</html>

第二种方法不是把它删除掉了,而是把p标签隐藏起来了

onmouseover:鼠标触及动态js-

实战

由json对象创建一个table表格

json格式的对象应该是什么样子:{name:"",age:"",sex:""}

<!DOCTYPE html>
<html> 
        <head>
                <title></title>
                <style type="text/css">
                        
                </style>
                <script type="text/javascript" src="J.js"></script>
                <script type="text/javascript">
                        // json格式的字符串
                        var str = '[{name:"赵晓虎",sex:"男",age:19},{name:"牛亮亮",sex:"男",age:29},{name:"杨中科",sex:"男",age:39}]';
                        onload = function() {
                                
                                // 生成一个table,然后追加到body中
                                
                                // 一开始就需要生成一个table
                                // 里面遍历json对象生成里面的tr
                                // 每一个json对象中的每一个成员(for-in)得到td标签
                                
                                // 1、生成table
                                var table = document.createElement("table");
                                table.border = "1";
                                // 2、得到json格式的对象
                                var jsons = new Function("return " + str)();
                                
                                // 3、循环这个数组
                                for(var i = 0; i < jsons.length; i++) {
                                        // 4、生成每一个行
                                        // 创建tr标签
                                        var tr = document.createElement("tr");
                                        // 5、添加td,就需要遍历每一个对象中的成员
                                        for(var k in jsons[i]) {
                                                // 6、创建td
                                                var td = document.createElement("td");
                                                td.appendChild(document.createTextNode(jsons[i][k]));
                                                // 7、追加td
                                                tr.appendChild(td);
                                        }
                                        // 循环结束,就得到一个行
                                        // 将行追加到table
                                        table.appendChild(tr);
                                }
                                // 将table加到body中
                                document.getElementsByTagName("body")[0].appendChild(table);
                                
                                var _ = 0;
                        };
                </script>
        </head>
        <body>
        </body>
</html>

无刷新评论

<html>
        <head>
                <title></title>
                <style type="text/css">			
                        #txt{
                                width:400px;
                                height:100px;
                        }
                        #dv{
                                border:1px solid pink;
                        }
                        
                </style>
                <script type="text/javascript" src="J.js"></script>
                <script type="text/javascript">
                        onload = function(){
                                var btn = J("btn");          //获取按钮对象

        btn.onclick=function(){
                var txt=J("txt").value;  //获取用户输入
                var p = document.createElement("p");   //创建p标签
                
                <!-- p.innerHTML=txt; -->
                p.appendChild(document.createTextNode(txt));   //创建文本节点并传值,并将文本追加到p中
                
                //追加或插入
                //方法一、
                var ps =J("dv").getElementsByTagName("p");   //获得dv对象中所有标签名符合要求的标签
                if(ps.length >0) {
                        //插入
                        J("dv").insertBefore(p,ps[0]);  //插入标签
                }else{
                        //追加
                        J("dv").appendChild(p);
                }
                
                //方法二、
                var ps =J("dv").getElementsByTagName("p");
                new Function("p","ps",'J("dv").' + 
                        (ps[0] ? "insertBefore(p,ps[0])" : "appendChild(p)")
                )(p,ps);
        };
        };
        </script>
        </head>
        <body>
                <textarea id="txt"></textarea>
                <br />
                <input type="button" value="评论" id="btn"/>
                <br />
                <div id ="dv"></div>
        </body>
</html>

内嵌样式与生成的dom节点

body里面没有div,script进行创建设置

<html>
        <head>
                <title></title>
                <style type="text/css">			
                        #dv{
                                width:300px;
                                height:100px;
                                border:1px solid red;
                                background-color:pink;
                        }
                </style>
                <script type="text/javascript" src="C:\Users\denglimei\Desktop\J.js"></script>
                <script type="text/javascript" scr>
                        onload = function(){
                                //创建div标签
                                var dv = document.createElement("div");   
                                dv.id="dv";
                                document.getElementsByTagName("body")[0].appendChild(dv);
                        };
                </script>
        </head>
        <body>	
        </body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/942655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑如何投屏到手机?Windows投屏到iPhone也可以吗?

我们知道&#xff0c;因为各大品牌厂商越来越维护自己的名声&#xff0c;都会推出“全家桶”&#xff0c;就是某些功能&#xff0c;你在使用同一品牌的电脑、手机、平板时非常好用&#xff0c;但一旦跨品牌就用不了。电脑投屏到手机也会遇到这种“品牌隔离”。 如果参会人使用…

对DataFrame对象中的数据将各行列进行整体平移DataFrame.shift()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 对DataFrame对象中的数据 将各行列进行整体平移 DataFrame.shift() [太阳]选择题 以下python代码错误的是? import pandas as pd dfpd.DataFrame({A:[1,2,3],B:[4,5,6]}) print(【显示】df&…

SAP MM学习笔记26- SAP中 振替转记(转移过账)和 在库转送(库存转储)3- Plant间在库转送

SAP 中在库移动 不仅有入库&#xff08;GR&#xff09;&#xff0c;出库&#xff08;GI&#xff09;&#xff0c;也可以是单纯内部的转记或转送。 1&#xff0c;振替转记&#xff08;转移过账&#xff09; 2&#xff0c;在库转送&#xff08;库存转储&#xff09; 1&#xff…

springboot+vue健身房俱乐部课程预约网站的设计与实现0356t

通过对知识内容的学习研究&#xff0c;进而设计并实现一个“力炫”健身馆网站。系统能实现的主要功能应包括&#xff1b;用户、健身教练、健身器材、健身课程、健身商品、健身资讯等的一些操作&#xff0c;传统的管理模式主要是使用纸作为介质&#xff0c;信息交流很大程度上受…

ASL芯片CS5366带DSC影像解压 替代PS186替代RTD2173替代AG9411 集睿致远方案设计优势

CS5366是ASL集睿致远推出的2LAN带PD&#xff08;最高100W&#xff09;可拉U3口的高集成度芯片&#xff0c;分辨率支持4K60HZ。在刷新率上&#xff0c;CS5366作为升级一代&#xff0c;超越了CS5266达到60HZ&#xff0c;同时在各个方面做到了优越性&#xff0c;极具性价比的一代&…

如何使用CSS实现一个自适应等高布局?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 Flexbox 布局⭐ 使用 Grid 布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发…

海康VisionMaster-全局变量-全局脚本-全局通讯

using System; using VM.GlobalScript.Methods; using System.Windows.Forms; using iMVS_6000PlatformSDKCS; using System.Runtime.InteropServices;/******************************* 示例说明: 接收全局通信模块数据示例* 前提: 全局通信模块中开启有通信设备* 控制逻…

Mycat单库分表

Mycat单库分表 一、准备工作 1.MySQL主从同步、JDK。 2.mycat解压即可&#xff0c;无需安装。 3.如果用的是云服务器&#xff0c;需要开放8066端口。 二、配置文件 1.server.xml&#xff1a;定义用户以及系统相关变量&#xff0c;如端口&#xff08;默认8066&#xff0…

【golang】15、cobra cli 命令行库

Cobra 是 golang 最流行的命令行库&#xff0c;文档见 一、脚手架 mkdir pt && cd pt && go mod init cobra-cli init # 在项目下运行即可生成脚手架# tree . ├── LICENSE ├── cmd # 生成了cmd目录 │ └── root.go # 生成了root.go, 其中定义了ro…

Kubernetes(k8s)上部署redis5.0.14

Kubernetes上部署redis 环境准备创建命名空间 准备PV和PVC安装nfs准备PV准备PVC 部署redis创建redis的配置文件部署脚本挂载数据目录挂载配置文件通过指定的配置文件启动redis 集群内部访问外部链接Redis 环境准备 首先你需要一个Kubernetes环境&#xff0c;可参考我写的文章&…

LLM - Baichuan-13B 多卡加载与推理测试

目录 ​编辑 一.引言 二.模型加载 1.量化加载 ◆ 基础配置 ◆ 8_bit 加载 ◆ 4_bit 加载 2.多卡加载 ◆ API 加载 ◆ accelerate 加载 三.模型推理 1.显存查看 ◆ Nvidia 显卡监控 ◆ Python subprocess 调用 2.双卡推理 ◆ 双卡 divice 分配 ◆ 双卡推理 GPU…

Redis数据结构:Zset类型全面解析

Redis&#xff0c;作为一种高性能的键值对数据库&#xff0c;因其丰富的数据类型和高效的性能而受到了广泛的关注和使用。在 Redis 的五种主要数据类型中&#xff0c;Zset&#xff08;有序集合&#xff09;类型可能是最复杂&#xff0c;但也是最强大的一种。Zset 不仅可以存储键…

【JavaSE专栏90】用最简单的方法,使用 JDBC 连接 MySQL 数据库

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;3年JAVA全栈开发经验&#xff0c;专注JAVA技术、系统定制、远程指导&#xff0c;致力于企业数字化转型&#xff0c;CSDN学院、蓝桥云课认证讲师。 主打方向&#xff1a;Vue、SpringBoot、微信小程序 本文讲解了如何使用…

git-tf clone 路径有空格处理方案

git-tf clone 路径存在空格情况下&#xff0c;运行命令报错&#xff1b; 需要对路径进行双引号处理

汽车电子笔记之:基于AUTOSAR的电机控制器架构设计

目录 1、概述 2、AUTOSAR设计 2.1、SWC设计 2.2、PORT设计 2.3、Runnable设计 2.4、电机控制器OS实现 1、概述 电机控制器应用层的软件架构较为复杂,主要包括PMSM(Permanent-MagnetSynchronous Motor)的矢量控制算法。根据PMSM的控制算法,对算法中的软件功能进行分析&…

Linux 多线程同步机制(上)

文章目录 前言一、线程同步二、互斥量 mutex三、死锁总结 前言 一、线程同步 在多线程环境下&#xff0c;多个线程可以并发地执行&#xff0c;访问共享资源&#xff08;如内存变量、文件、网络连接 等&#xff09;。 这可能导致 数据不一致性, 死锁, 竞争条件等 问题。 为了解…

【LeetCode-中等题】138. 复制带随机指针的链表

文章目录 题目解题核心思路&#xff1a;找random指针指向思路一&#xff1a;哈希思路二&#xff1a;迭代构造新链表 方法一&#xff1a;哈希递归方法二&#xff1a;纯哈希方法三&#xff1a;迭代 节点拆分 题目 解题核心思路&#xff1a;找random指针指向 这里的拷贝属于深拷…

Leetcode刷题:395. 至少有 K 个重复字符的最长子串、823. 带因子的二叉树

Leetcode刷题:395. 至少有 K 个重复字符的最长子串、823. 带因子的二叉树 1. 395. 至少有 K 个重复字符的最长子串算法思路参考代码和运行结果 2. 823. 带因子的二叉树算法思路参考代码和运行结果 1. 395. 至少有 K 个重复字符的最长子串 题目难度&#xff1a;中等 标签&#…

lenovo联想笔记本小新Air-15 2021款Intel版ITL版(82GM)原装出厂Win10系统

自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件大小&#xff1a;11.2GB 链接&#xff1a;https://pan.baidu.com/s/12NTMOt5eUjOIsbayXPyiww?pwdrs4v 提取码&#xf…

基于单片机的数字温度计设计

一、项目背景 数字温度计是一种用于测量和显示环境温度的设备。本文章介绍基于STC89C52主控芯片的数字温度计的设计过程和实现原理。该设计采用DS18B20温度传感器进行温度采集&#xff0c;使用LCD1602显示屏进行温度显示&#xff0c;通过按键设置温度的上限和下限阀值&#xf…