webAPI中的节点操作、高级事件
一、节点操作
1.删除节点
node.removeChild(); 方法从node节点中删除一个子节点,返回删除的节点
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>01删除节点</title>
</head>
<body><button id="btn">删除</button><ul id="ul"><li>光头强</li><li>熊大</li><li>熊二</li></ul><script>//1.获取元素var ul = document.getElementById('ul');var btn = document.getElementById('btn');//2.注册事件btn.onclick = function(){if(ul.children.length == 0){this.disabled = true; //按钮禁用} else {//node.removeChild(要删除的对象);//ul.children[下标]表示是第几个孩子ul.removeChild(ul.children[0]);}}</script>
</body>
</html>
2.删除留言案例
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>02删除留言案例</title><style>*{margin: 0; padding: 0;}body{padding: 100px;}textarea{width: 200px;height: 100px;border: 1px solid red;resize: none;}ul {margin-top: 50px;}li{width: 300px;padding: 5px;background-color: pink;color: #fff;font-size: 14px;margin: 15px 0;}</style>
</head>
<body><textarea name="" id="text"></textarea><br/><button id="btn">发布</button><ul id="ul"></ul><script>//1.获取元素var btn = document.getElementById('btn');var text = btn.previousElementSibling.previousElementSibling;//上一个兄弟节点var ul = btn.nextElementSibling; //获取下一个兄弟节点//2.注册事件btn.onclick = function(){if(text.value == ''){alert('请输入内容');return false;} else {//2.1 创建元素var li = document.createElement('li');//2.2 给li里面添加内容li.innerHTML = text.value + "<a href='javaScript:void(0);' class='rm'>删除</a>";//2.3 添加元素//ul.appendChild(li);ul.insertBefore(li,ul.children[0]); //添加ul前面的第一个位置//2.4 获取到所有的a标签对象var as = document.getElementsByClassName('rm');//2.5 遍历所有的a,并给他注册事件for(var i = 0; i < as.length; i++){as[i].onclick = function(){//删除当前点击的这个节点//this是a标签对象 this.parentNode表示当前点击的这个li的父亲ul.removeChild(this.parentNode);}}}}</script>
</body>
</html>
3.复制(克隆)节点
node.cloneNode(); 括号里面可以不写,默认值是false,表示是浅拷贝,只拷贝标签不拷贝内容
node.cloneNode(true); 表示深拷贝,会拷贝标签和里面的内容
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><ul id="ul"><li>111</li><li>222</li><li>333</li></ul><script>// 1.获取对象var ul = document.getElementById('ul');//2 - 1 node.cloneNode();括号为空或者里面的值是false,表示浅拷贝,只复制标签不只复制里面的内容var li1 = ul.children[0].cloneNode();//2 - 2 node.cloneNode(true);括号为true,表示深拷贝,复制标签并且会复制标签种的内容var li2 = ul.children[0].cloneNode(true);//3.添加到ul中ul.appendChild(li1);ul.appendChild(li2);</script>
</body>
</html>
案例——动态生成表格
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>table{width: 500px;margin: 100px auto;border-collapse: collapse;text-align: center;}td,th{border: 1px solid #333;}thead tr{height: 40px;background-color: #ccc;}</style>
</head>
<body><table><thead><tr><th>姓名</th><th>科目</th><th>成绩</th><th>操作</th></tr></thead><tbody id="tbody"></tbody></table><script>//准备table中要添加的数据var datas = [{name:'柯震东',subject:'JavaScript',score:100},{name:'房祖名',subject:'Java',score:90},{name:'蔡徐坤',subject:'Python',score:80}];//往tbody种创建行var tbody = document.getElementById('tbody');//有多少条数据,添加多少次for(var i = 0; i < datas.length; i++){//1.创建tr行var tr = document.createElement('tr');//2.创建td (td的创建熟练和datas中的属性的个数有关)for(var k in datas[i]){ //循环datas中的属性var td = document.createElement('td');//把对象里面的属性值data[i][k]给td//3.td中添加数据//console.log(k + '--->' + datas[i][k]);td.innerHTML = datas[i][k]; //给属性赋值//4.将td加入到trtr.appendChild(td); }//添加操作按钮var td = document.createElement('td');td.innerHTML = '<a href="javaScript:;" class="del">删除</a>'tr.appendChild(td);//5.再将tr加入到tbody里面去tbody.appendChild(tr);}//删除操作//1.获取到所有的删除按钮var as = document.getElementsByClassName('del');//2.循环遍历,注册事件for(var i = 0; i < as.length; i++){as[i].onclick = function(){tbody.removeChild(this.parentNode.parentNode);}}</script>
</body>
</html>
4.创建元素的三种方式
- document.write();
- element.innerHTML
- document.createElement();
区别:
- document.write(); 是直接将内容写入到也买你内容流,但是文档流执行完毕,则它会导致页面全部重绘
- innerHTML 是将内容写入到某个DOM节点,不会导致整个页面重绘,创建多个元素效率更高(不要拼接字符串,采取数组形式拼接),结构稍微复杂
- createElement() 创建多个元素效率低一点点,但是结构更清晰(推荐)
**注意:**innerHTML效率要比createElement高
4.1 创建方式
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>05三种创建元素的方式</title>
</head>
<body><button id="btn">点击</button><p>abc</p><div id="inner"></div><div id="create"></div><script>var btn = document.getElementById('btn');//1.document.write(); 创建元素,因为会重绘整个页面,很多场合不太适用// btn.onclick = function(){// document.write('<div>123<div>');// }//2.innerHTML创建元素var inner = document.getElementById('inner');// for(var i = 0; i <= 100; i++){// inner.innerHTML += '<a href="#">百度</a>'// }var arr = [];for(var i = 0 ;i <= 100; i++){arr.push('<a href="#">百度</a>');}inner.innerHTML = arr.join('');//3.document.createElement()创建元素var create = document.getElementById('create');for(var i = 0; i <= 100; i++){var a = document.createElement('a');a.setAttribute('href','#');a.innerHTML = '百度'create.append(a);}</script>
</body>
</html>
4.2 效率对比
innerHTML字符串拼接方式—效率低
createElement效率一般
innerHTML数组方式–效率高
innerHTML拼接字符串效率最低
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>06效率测试-innerHTML字符串拼接</title>
</head>
<body><script>function fn(){var d1 = + new Date();var str = '';for(var i = 0; i < 1000; i++){document.body.innerHTML += '<div style="width:100px;height=2px;border:1px solid blue;"></div>'}var d2 = + new Date();console.log(d2 - d1);}fn();</script>
</body>
</html>
innerHTML拼接数组效率最高
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>07效率测试-innerHTML数组拼接</title>
</head>
<body><script>function fn(){var d1 = + new Date();var arr = [];for(var i = 0; i < 1000; i++){arr.push('<div style="width:100px;height=2px;border:1px solid blue;"></div>')}document.body.innerHTML = arr.join('');var d2 = + new Date();console.log(d2 - d1);}fn();</script>
</body>
</html>
createElement效率一般
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>06效率测试-innerHTML字符串拼接</title>
</head>
<body><script>function fn(){var d1 = + new Date();for(var i = 0; i < 1000; i++){//document.body.innerHTML += '<div style="width:100px;height=2px;border:1px solid blue;"></div>'var div = document.createElement('div');div.style.width = '100px';div.style.height = '2px';div.style.border = '1px solid blue'document.body.appendChild(div);}var d2 = + new Date();console.log(d2 - d1);}fn();</script>
</body>
</html>
5.DOM核心总结
5.1 节点API
对于javaScript来说,为了操作HTML,js就有了一套自己的DOM编程接口
- 创建节点
- document.write()
- innerHTML
- createElement
- 增加(将节点添加到某个节点)
- appendChild
- insertBefore
- 删除
- removeChild
- 改
- 修改内容:innerHTML,innerText
- 修改表单元素:value、type、disabled等等
- 修改元素样式:style、className
- 查询
- 主要查找dom的元素怒
- DOM提供的API方法:document.getElementById(id)、document.getElementsByTagName、document.getElementsByClassName
- H5提供了新方法:querySelector、querySelectorAll
- 利用节点操作获取元素:父节点(parentNode)、子节点(children)、兄(previousElementSibling、nextElementSibling)
5.2 属性操作
自定义属性
- setAttribute 设置dom的属性值
- getAttribute 获取dom的属性值
- removeAttribute 移除属性值
内置属性:对象.属性=值; 对象.属性 获取值
5.3 事件操作(重点)
二、高级事件
1.注册事件
注册事件有两种方式:
- 传统方式
- 利用on开头的事件,如:onclick
- 特点:注册事件的唯一性。同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数将会覆盖前面注册的处理函数。
- 监听注册方式
- w3c标准推荐方式
- addEventListener() 它是一个方法。
- 特点:同一个元素同一个事件可以注册多个监听器,执行顺序按照注册顺序依次执行。
2.事件监听
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>09事件监听</title>
</head>
<body><button id="btn1">传统注册事件</button><button id="btn2">方法监听注册事件</button><script>//获取到按钮var btn1 = document.getElementById('btn1');var btn2 = document.getElementById('btn2');//1.传统注册事件btn1.onclick = function(){alert('this is btn1');}btn1.onclick = function(){alert('btn1 hahahahahaahahah');}//2.事件监听 addEvenetListener// 1)里面的事件类型是一个字符串,必须加引号而且不带on// 2)同一个元素,同一个事件可以添加多个监听btn2.addEventListener('click',function(){alert('this is btn2');});btn2.addEventListener('click',function(){alert('btn2~~~~~~~~~~~~');});//3.【了解】 attachEvent ie9以前的版本支持// btn1.attachEven('onclick',function(){// alert('1111111');// });</script>
</body>
</html>
3.删除事件(解绑事件)
removeEventListener 删除事件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>10删除事件</title><style>div{width: 100px;height: 100px;background-color: pink;}</style>
</head>
<body><div>1</div><div>2</div><div>3</div><script>//获取所有的divvar divs = document.querySelectorAll('div');// var divs = document.getElementsByTagName('div');//给第一个div注册事件divs[0].onclick = function(){alert(111111);//传统的方式删除事件divs[0].onclick = null;}//removeEventListener 删除事件divs[1].addEventListener('click',fn);function fn(){alert(2222222);//删除事件divs[1].removeEventListener('click',fn);}</script>
</body>
</html>
4.DOM事件流
html中的标签都是相互嵌套的,我们可以将元素想象成一个盒子装着另一个盒子,document就是最外面的大盒子
当你单击一个div的时候,同时你页单击了div的父元素,甚至是整个页面
那么是先执行父元素的单击事件,还是先执行里面的div单击事件?
事件流描述的是从页面中接受事件的顺序
事件发生的时候在元素节点直接按照特点的顺序传播,这个传播过程,我们就称之为DOM事件流
- 事件冒泡:IE浏览器最早提出,事件开始时由最具体的元素接受,然后逐级向上传播到DOM最顶层节点过程
- 事件捕获:网景最早提出,由DOM最顶层节点开始,然后逐层向下传播到最具体的元素接受的过程。
当时这2大浏览器霸主谁也不服谁。
IE提出从目标元素开始,然后一层一层向外接受事件并响应,也就是冒泡型事件流。
网景提出从最外层开始,然后一层一层向内接受事件并响应,也就是事件捕获流最终,w3c采用折中的方式,先捕获再冒泡
现代浏览器都遵循了此标准,所以事件发生的时候,会经历三个阶段。
- 1.捕获阶段
- 2.当前目标阶段
- 3.冒泡阶段
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>11.事件的三个阶段</title><style>#father{width: 300px;height: 300px;margin: 100px auto;background-color: pink;text-align: center;}#son{width: 200px;height: 200px;margin: 50px;background-color: purple;line-height: 200px;color: #fff;}</style>
</head>
<body><div id="father"><div id="son">son盒子</div></div><script>//dom事件流三个阶段://1.js代码中只能执行捕获或冒泡其中的一个阶段//2.onclick只能得到冒泡阶段//3.捕获阶段,如果addEvenetListner 第三个参数是true,那么则处于捕获阶段 document->html->body->father->son// var son = document.getElementById('son');// son.addEventListener('click',function(){// alert('son');// },true)// var father = document.getElementById('father');// father.addEventListener('click',function(){// alert('father');// },true)//4.冒泡阶段,如果addEvenetListner第三个参数是false 或者省略不写,则处于冒泡阶段var son = document.getElementById('son');son.addEventListener('click',function(){alert('son');},false)var father = document.getElementById('father');father.addEventListener('click',function(){alert('father');},false)document.addEventListener('click',function(){alert('document');})</script>
</body>
</html>
5.事件对象
5.1 什么是事件对象
事件发生后,跟事件相关的一系列信息数据的集合都放在这个对象里面,这个对象就是事件对象。
如:
- 谁绑定了事件
- 鼠标触发事件的话,会得到鼠标相关的信息,如:鼠标的位置
- 键盘触发事件的话,会得到键盘相关的信息,如:按下了哪个键
5.2 事件对象使用
div.onclick = function(e){}
div.addEventListener(‘click’,function(event){
console.log(event);
});
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>12事件对象</title><style>div{width: 100px;height: 100px;background-color: pink;}</style>
</head>
<body><div>123</div><script>//事件对象var div = document.querySelector('div');// div.onclick = function(e){// // console.log(e);// // console.log(window.event);// e = e || window.event;// console.log(e);// }div.addEventListener('click',function(event){console.log(event);});//1.event:就是一个事件对象,写到我们侦听函数的小括号里,当作形参来看//2.事件对象只有有了事件才会存在,它是系统给我们自动创建的,不需要我们传递参数//3.事件对象是我们事件的一些列相关数据的集合,跟事件相关,比如事件点击里面就包含了鼠标的相关信息// 鼠标的坐标,比如是键盘事件里面会包含键盘事件信息,比如判断用户按下了哪个键//4.这个事件我们可以自己命名的,比如:event、evt、e//5.事件对象也有兼容性的问题,现在没有问题了,有兼容性问题(IE678版本)可以写成e = e || window.event; </script>
</body>
</html>
5.3 e.target和this的区别
- this是使劲按绑定的元素(绑定这个事件处理函数的元素)
- e.target是事件触发的元素
通常情况下target和this是一致的。
但有一种情况不同:那就是再事件冒泡的时候。this指向的是父元素,而target指向的是子元素
this指向父元素是因为:它绑定的事件的元素对象就是父元素
target他是触发事件的哪个具体元素对象
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>13事件对象e.target</title>
</head>
<body><button id="btn">按钮</button><ul id="ul"><li>abc</li><li>def</li></ul><script>//常见事件的属性和方法//1.e.target返回的是触发事件的对象(元素) this返回的是绑定事件的对象(元素)//区别:e.target点击了哪个元素,就返回这个元素。 this那个元素绑定了这个点击事件,那么返回的就是绑定者var btn = document.getElementById('btn');btn.addEventListener('click',function(e){console.log(e.target)console.log(this);});var ul = document.getElementById('ul');ul.addEventListener('click',function(e){//因为我们给ul绑定了事件,那么this就是指向ulconsole.log(this);//console.log(e.currentTarget);//e.target指向我们点击那个对象,谁触发了这个事件,那么e.target就是谁console.log(e.target);})</script>
</body>
</html>
6.阻止默认行为
html中一些标签由默认行为,例如:a标签被点击了,默认进行页面跳转
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>14事件阻止默认行为</title>
</head>
<body><div>123</div><a href="http://www.baidu.com">百度</a><form action="http://www.baidu.com"><input type="submit" value="提交"></form><script>//获取对象var div = document.querySelector('div');div.addEventListener('click',fn);div.addEventListener('mouseover',fn);div.addEventListener('mouseout',fn);function fn(e){console.log(e.type);}//2.阻止默认事件(行为),让超链接不跳转,或者是表单不提交var a = document.querySelector('a');// a.addEventListener('click',function(e){// e.preventDefault(); //阻止默认 dom标准写法// })//3.传统注册方式a.onclick = function(e){//e.preventDefault();return false; //利用return false也能阻止默认行为}var form = document.querySelector('form');form.onsubmit = function(){return false;}</script>
</body>
</html>
7.阻止事件冒泡
//阻止冒泡:dom推荐的是e.stopPropagation();
e.cancelBubble = true; //cancle:取消 Bubble:气泡,泡沫。(非标准写法)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>15阻止事件冒泡</title><style>.father{width: 300px;height: 300px;margin: 100px auto;background-color: pink;text-align: center;}.son{width: 100px;height: 100px;line-height: 100px;margin: 100px;background-color: purple;color: #fff;}</style>
</head>
<body><div class="father"><div class="son">son儿子</div></div><script>//获取对象//阻止冒泡:dom推荐的是e.stopPropagation(); var son = document.querySelector('.son');var father = document.querySelector('.father');son.addEventListener('click',function(e){alert('son');e.stopPropagation(); //阻止冒泡(传播) stop:阻止 Propagation:传播},false);father.addEventListener('click',function(e){alert('father');//e.stopPropagation();e.cancelBubble = true; //cancle:取消 Bubble:气泡,泡沫。(非标准写法)},false);document.addEventListener('click',function(){alert('document');})</script>
</body>
</html>
8.事件委托
事件冒泡本身的特性,会带来坏处,同时也会带来好处。
8.1 什么是事件委托
把事情委托给别人,代为处理
事件委托也称为事件代理,在jQuery里面称之为事件委派
大白话:不给子元素注册事件,给父元素注册事件,把处理代码在父元素的事件中执行。
8.2 应用案例
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>16.事件委托.html</title>
</head>
<body><ul><li>我爱中国1</li><li>我爱中国2</li><li>我爱中国3</li><li>我爱中国4</li><li>我爱中国5</li></ul><script>//获取对象var ul = document.querySelector('ul');ul.addEventListener('click',function(e){console.log(e.target);e.target.style.backgroundColor = 'pink'});</script>
</body>
</html>
9.常见的鼠标事件
9.1 常见事件
鼠标事件 | 触发条件 |
---|---|
onclick | 鼠标点击左键触发 |
onmouseover | 鼠标经过触发 |
onmouseout | 鼠标离开触发 |
onfocus | 获取鼠标焦点 |
onblur | 失去鼠标焦点触发 |
onmousemove | 鼠标移动触发 |
onmouseup | 鼠标按键弹起触发 |
onmousedown | 鼠标按键按下触发 |
9.2 不可分享
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div>我是一段小说文字</div><script>// 1.contextmenu :就是我们鼠标右键事件document.addEventListener('contextmenu',function(e){e.preventDefault();});// 2.进制选中文字 selectstartdocument.addEventListener('selectstart',function(e){e.preventDefault()})</script>
</body>
</html>
9.3 鼠标事件对象
event 事件对象是事件相关的一系列信息的集合
现阶段我们主要使用鼠标事件对MouseEvent 和 键盘事件对象 KeyboardEvent
鼠标事件对象 | 说明 |
---|---|
e.clientX | 返回鼠标相对于浏览器窗口可视区域的X坐标 |
e.clientY | 返回鼠标相对于浏览器窗口可视区域的Y坐标 |
e.pageX | IE9+支持,返回鼠标相对于文档页面X坐标 |
e.pageY | IE9+支持,返回鼠标相对于文档页面Y坐标 |
e.screenX | 鼠标相对于电脑屏幕的X坐标 |
e.screenY | 鼠标相对于电脑屏幕的Y坐标 |
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>18.鼠标在页面中的坐标</title><style>body{height: 3000px;}</style>
</head>
<body><script>//鼠标事件对象document.addEventListener('click',function(e){//1.client 鼠标在可视区的x和y坐标console.log('clientX---->' + e.clientX);console.log('clientY---->' + e.clientY);//2.page 鼠标在页面文档的x和y坐标console.log('pageX---->' + e.pageX);console.log('pageY---->' + e.pageY);//3.screen 鼠标在电脑屏幕的x和y坐标console.log('screenX---->' + e.screenX);console.log('screenY---->' + e.screenY);});</script>
</body>
</html>
相关文章:

webAPI中的节点操作、高级事件
一、节点操作 1.删除节点 node.removeChild(); 方法从node节点中删除一个子节点,返回删除的节点 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…...

C++内存对齐机制简介
C内存对齐机制是指数据在内存中按照特定规则进行排列,这个机制可以提高访问效率并且满足硬件访问特性。 C内存对齐机制的一些关键规则如下: 不同类型的数据在内存中的起始地址应该是其大小的倍数。比如,4字节的整型应该存放在地址是4的倍数…...

java集合进阶篇-《List集合》
个人主页→VON 收录专栏→java从入门到起飞 目录 编辑 一、前言 二、List集合简要概述 三、List集合主要函数的应用 四、List集合的遍历 五、思考 一、前言 List集合与Collection集合的相同之处还是挺多的,不过有些小细节又不太一样,其中有一个…...

FPGA图像处理之均值滤波
文章目录 一、什么是图像滤波?1.1 噪声类型1.2 滤波类型 二、均值滤波原理2.1 3*3窗口滑动过程2.2 图像扩展 三、Matlab实现均值滤波四、FPGA实现均值滤波4.1 生成 3*3 矩阵4.2 仿真3*3矩阵4.3 计算均值4.4 仿真均值滤波 一、什么是图像滤波? 图像滤波是…...

高等数学 6.2 定积分在几何学上的应用
文章目录 一、平面图形的面积1.直角坐标情形2.极坐标情形 二、体积1.旋转体体积2.平行截面面积为已知的立体的体积 三、平面曲线的弧长 一、平面图形的面积 1.直角坐标情形 我们已经知道,由曲线 y f ( x ) ( f ( x ) ⩾ 0 ) y f(x) (f(x) \geqslant 0) yf(x)(f…...

缓存常见问题:缓存穿透、雪崩、击穿及解决方案分析
1. 什么是缓存穿透,怎么解决? 缓存穿透是指用户请求的数据在缓存中不存在即没有命中,同时在数据库中也不存在,导致用户每次请求该数据都要去数据库中查询一遍。如果有恶意攻击者不断请求系统中不存在的数据,会导致短时…...

C++:拷贝构造
拷贝构造函数是参数类型为本类的引用的构造函数,它也叫复制构造函数,它只有一个参数。当没有写拷贝构造函数时,会有一个默认的拷贝构造函数。 class AA { public:AA(AA& ra){}} 那么什么时候会调用此函数呢?有以下三种情况 …...

BGP(边界网关协议)
1、网络AS(自治系统) 边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。 AS是指在一个实体管辖下的拥有…...

Spring 概念汇总
一、Spring中的依赖注入和依赖反转 依赖注入(Dependency Injection) 概念 依赖注入是一种设计模式,它允许在对象创建时将其依赖的对象传递给它,而不是让对象自己去创建或查找依赖对象。在Spring中,依赖注入是控制反转…...

快速在找到函数的实体的方法
当我们写了许多许多的函数,那我们怎么快速的找到他们呢 我们只需要按下ctrl,在点击函数名字就可以快速的找到我们想要的函数...

05 django管理系统 - 部门管理 - 修改部门
04我们已经实现了新增部门的功能,下面开始修改部门模块的实现。 按道理来说,应该是做成弹框样式的,通过ajax悄咪咪的发数据,然后更新前端数据,但是考虑到实际情况,先用页面跳转的方式实现,后面…...

C++初阶——入门
目录 1、C发展历史 2、C版本更新 3、C参考文档 4、C书籍推荐 5、C的程序 6、命名空间 6.1 namespace的作用 6.2 namespace的定义 6.3 namespace的使用 7、C输入&输出 8、缺省参数 9、函数重载 10、引用 10.1 引用的概念和定义 10.2 引用的特性 10.3 引用的使…...

Java基于SSM微信小程序物流仓库管理系统设计与实现(源码+lw+数据库+讲解等)
选题背景 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…...

82.【C语言】数据结构之顺序表的初始化和销毁
目录 1.线性表 2.分类 1.静态顺序表:使用定长数组存储元素 代码示例(写入Seqlist.h中) 2.动态顺序表:使用与动态内存管理有关的函数 代码示例(写入Seqlist.h中) 补:数据管理的四个需求:增改删查 3.操作顺序表 1.初始化顺序表 1.不开辟空间 2.开辟空间 1…...

java-推荐一个控制台输出颜色ANSI字符的类
java-推荐一个控制台输出颜色ANSI字符的类 背景代码调用输出 背景 这个类是来自hive的一段代码,大家可以参考一下,这个类名是ColorBuffer 代码 /** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreem…...

关于定义结构体别名时 是否加*
在C语言中,使用typedef来定义结构体类型及其指针的别名时,Node和LinkList的声明方式有所不同,这是因为你对它们的目的和用途有不同的设定。 首先,看一下你的代码: typedef struct { int data; int lenght; // 注意&am…...

成语积累学习
识文断字:有一点文化知识 雨后春笋:春雨过后快速生长的竹笋;比喻大量涌现的新生事物 味同嚼蜡:如同咀嚼白蜡一样,毫无味道。形容文章或言辞枯燥乏味。 差强人意:大体上让人满意 八面玲珑:处…...

基于Java的茶叶商城设计与实现(源码+定制+开发)茶叶电商系统开发、茶叶电商平台开发、茶叶在线销售平台设计与开发
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

桥接、NAT和仅主机三种网络模式对虚拟机IP地址分配的影响
在虚拟机中,桥接、NAT和仅主机(Host-Only)这三种网络模式会给虚拟机带来不同的IP地址分配方式及相应的网络连接特性,从而产生不同的影响,具体如下: 桥接模式 IP地址分配特点:在桥接模式下&…...

音乐播放器-0.专栏介绍
1.简介 本专栏使用Qt QWidget作为显示界面,你将会学习到以下内容: 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放,音乐歌词文件加载,展示。 6.播放器界面换肤。 相信学习了本专栏…...

单月变现3W!AI助力沙雕图文爆红小绿书,12篇阅读量破10万+!
最近有没有小伙伴注意到,在各大社交平台上,那些温馨治愈、搞笑沙雕的图文内容,能吸引大量的目光和流量,不久前,我也曾分享过这类内容,比如让人眼前一亮的人间清醒老奶奶,她的图文就属于这类流行…...

C语言复习第4章 数组
目录 一、一维数组的创建和初始化1.1数组的创建1.2 变长数组1.3 数组的初始化1.4 全局数组默认初始化为01.5 区分两种字符数组1.6 用sizeof计算数组元素个数1.7 如何访问数组元素1.8 一维数组在内存中的存储(连续存储)1.9 访问数组元素的另一种方式:指针变量1.10 数组越界是运行…...

大数据研究实训室建设方案
一、概述 本方案旨在提出一套全面的大数据研究实训室建设策略,旨在为学生打造一个集理论学习与实践操作于一体的高端教育环境。实训室将专注于培养学生在大数据处理、分析及应用领域的专业技能,通过先进的设施配置、科学的课程体系和实用的实训模式&…...

Unity3D 观察者模式
Unity3D 泛型事件系统 观察者模式 观察者模式是一种行为设计模式,通过订阅机制,可以让对象触发事件时,通知多个其他对象。 在游戏逻辑中,UI 界面通常会监听一些事件,当数据层发生变化时,通过触发事件&am…...

vue从0开始的项目搭建(含环境配置)
一、环境准备 下载node.js 检查node.js版本 替换npm下载源 1.下载node.js: Node.js — 在任何地方运行 JavaScript (nodejs.org) 2.查看版本: windowsr输入cmd进入输入node -v命令查看版本号是否出现确认是否安装 2.替换npm下载源: npm config set registry https://reg…...

力扣61~65题
题61(中等): 分析: python代码: # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def rot…...

API接口开发流程与指南
API(应用程序编程接口)是现代软件开发中不可或缺的一部分,它允许不同的软件应用之间进行交互和数据交换。无论是调用第三方服务、集成内部系统还是开发微服务架构,API都扮演着关键角色。本文将为你提供一个API接口入门的详解&…...

如何在Android中进行日志打印和调试?
在Android开发中,日志打印和调试是开发者定位问题、优化性能和提升应用质量的重要手段。以下将详细阐述如何在Android中进行日志打印和调试,包括日志工具的使用、调试技巧以及实践中的最佳实践。 一、日志工具的使用 1. Log类 Android中的日志工具类是…...

Linux基本使用和程序部署
文章目录 一. Linux背景Linux发行版 二. Linux环境搭建Linux常见命令lspwdcdtouchcatmkdirrmcpmvtailvimgreppsnetstat管道 三. 搭建java部署环境安装jdk安装mysql部署Web项目到Linux 一. Linux背景 1969−1970年,⻉尔实验室的DennisRitchie和KenTompson开发了Unix操作系统. 他…...

照片编辑成动态视频用什么软件好
在数字时代,让照片动起来确实已成为一种流行的潮流和趋势。如今,市面上涌现出众多软件,它们不仅配备了丰富多样的动态效果和特效,还支持用户进行个性化的编辑和创作。无论你是希望将家庭合影转化为充满温情的动画,还是…...