技术标签: 笔记 前端 javascript
语法:document.getElementById(’id‘)
返回值:元素对象 或 null
语法:document.getElementsByTagName(‘标签名’)
或者 element.getElementsByTagName(‘标签名’)
返回值:元素对象集合(伪数组,数组元素)
语法:document.getElementsByClassName(‘类名’)
返回值:元素对象集合(伪数组,数组元素)
语法:document.querySelector(‘.类名或标签名’) *如果html里类名重复,只获取第一个
返回值:元素对象 或 null
语法:document.querySelectorAll(‘.类名或标签名’)
返回值:元素对象集合(伪数组,数组元素)
document.body
document.documentElement
子名.parentNode *获取的就是父
var 属性名 = document.querySelector('子名')
属性名.parentNode // 获取的就是父标签
父名.children *获取子节点
var 属性名 = document.querySelector('父名')
console.log(属性名.children); //获取的就是子标签
nextSibling *下一个兄弟节点 包含元素 文字节点
previousSibling *上一个兄弟节点 包含元素 文字节点
两种常用方式
var ol = document.querySelector('ol');
console.log(ol.children[0]); // 第一个子
console.log(ol.children[ol.children.length - 1]); // 最后一个子
var ol = document.querySelector('ol');
var lis = ol.querySelectorAll('li')
console.log(lis[0]); // 第一个子
console.log(lis[lis.length-1]); //最后一个子
有文字时双击会选中文字解决方法
span.ondblclick=function(){
// 双击禁止选定文字
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
}
<body>
我是一段不愿意分享的文字
<script>
// 1. contextmenu 我们可以禁用右键菜单
document.addEventListener('contextmenu', function(e) {
e.preventDefault();
})
// 2. 禁止选中文字 selectstart
document.addEventListener('selectstart', function(e) {
e.preventDefault();
})
</script>
</body>
//传统键盘事件写法
document.onkeyup=function() {
alert('我弹出了')
}
$('from').on('submit', function (e) {
alert('监听到了表单的提交事件2')
e.preventDefault()
})
谁.addEventListener(‘鼠标(键盘)事件’, function() { }
鼠标(键盘)事件: 就是把传统鼠标(键盘)事件 前的 on 去掉
// 事件侦听鼠标事件写法
btn.addEventListener('click', function (){
alert('hi-')
})
// 事件侦听键盘事件写法
document.addEventListener('keyup', function () {
console.log('我弹出了')
})
鼠标事件 = null;
var div = document.querySelector('div');
div.onclick = function() {
alert(11);
// 1. 传统方式删除事件
divs.onclick = null;
}
removeEventListener(‘鼠标事件去掉on’, 函数名);
*只有将函数分开写的时候才能解绑事件
divs[1].addEventListener('click', fn)
function fn() {
alert(22);
divs[1].removeEventListener('click', fn);
}
*可以给未来动态创建的元素绑定事件
//click 是绑定在ol 身上的,但是 触发的对象是 ol 里面的小li
var ol = document.querySelector('ol');
ol.on('click', 'li', function () {
console.log(22);
})
// 可以给未来动态创建的元素绑定事件
var li = $("<li>我是后来创建的</li>")
$('ol').append(li)
innerHTML * 常用
innerText
获取的元素名字.className =‘新类名’
获取的元素名字.style.需要改的样式名=‘新样式’
获取的元素名字.src=‘新图片地址’
名字.alt=‘ ’
名字.title=‘ ’
location.href=’ ’
元素对象.className = ‘旧类名 新类名’; *这样旧类名不会被覆盖掉
flag
this
//单个网页实现单击屏幕发出声音
function playSound(){
var audio=document.getElementById("audio");
if(audio.paused) { //如果音频是暂停状态
audio.load; //加载音频文件
audio.play(); //播放
}else { //否则,也就是说音频是播放状态
audio.pause(); //就暂停
}
}
//调用
window.onclick=function () {
playSound();
}
input.select() // 文本框内容处于选中状态
.trim()
document.querySelector('form表单名').reset()
getAttribute()
div.getAttribute(‘class’) *获取class的类名
setAttribute()
div.setAttribute(‘id’, 2) *把div 的id名改成2
*如果没有这个属性就增加这个属性并设置值为2 不提倡,见H5自定义属性规范。
removeAttribute()
div.removeAttribute(‘class’) *移除class类名
H5规定自定义属性data-开头作为属性名并赋值
// // h5新增的获取自定义属性的方法 它只能获取data-开头的
div.setAttribute(‘data-a’,1)
div.getAttribute(‘data-a’);
dataset
// // dataset 是一个集合里面存放了所有以data开头的自定义属性
console.log(div.dataset.a);
<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<button>按钮4</button>
<button>按钮5</button>
<script>
// 1. 获取所有按钮元素
var btns = document.getElementsByTagName('button');
// btns得到的是伪数组 里面的每一个元素 btns[i]
for (var i = 0; i < btns.length; i++) {
btns[i].onclick = function() {
// (1) 我们先把所有的按钮背景颜色去掉 干掉所有人
for (var i = 0; i < btns.length; i++) {
btns[i].style.backgroundColor = '';
}
// (2) 然后才让当前的元素背景颜色为pink 留下我自己
this.style.backgroundColor = 'pink';
}
}
var 元素名 = document.createElement(‘标签名’);
元素名.innerHTML = ‘’ // 在这个元素里创建一个标签
添加到谁的名.appendChild(创建标签的元素名)
var li = document.querySelector(‘li’); //创建li标签
ul.appendChild(li); // 添加到ul里
添加到谁的名.insertBefore(创建标签的元素名,添加到谁的名.[添加的位置索引号])
var lili = document.createElement(‘li’) //创建li标签
ul.insertBefore(lili,ul.children[0]) //添加到ul 里最前索引号为0的位置
创建
var li = '<li class=""><span>新选项卡</span><span class="iconfont icon-guanbi"></span></li>';
添加
ul.insertAdjacentHTML('beforeend', li); // 插入元素内部的最后一个子节点之后。 //添加到后面
‘beforebegin’:元素自身的前面。
‘afterbegin’:插入元素内部的第一个子节点之前。
‘beforeend’:插入元素内部的最后一个子节点之后。
‘afterend’:元素自身的后面。
父名.removeChild(父.children[0]) *删除谁里面的(谁)
ul.removeChild(ul.children[0]) //删除ul里的第一个孩子
ul.remove() // 删除ul和里的所有
cloneNode() *谁.cloneNode() 复制谁 然后再添加
var lili = ul.children[0].cloneNode(true) //复制ul里的第一个
ul.appendChild(lili) //添加到ul 最后
// 1. 谁.cloneNode(); 括号为空或者里面是false 浅拷贝 只复制标签不复制里面的内容
// 2. 谁.cloneNode(true); 括号为true 深拷贝 复制标签复制里面的内容
*子盒子 和 父盒子都有点击事件
捕获阶段
当前目标阶段
冒泡阶段
<div class="father">
<div class="son">son盒子</div>
</div>
<script>
var son = document.querySelector('.son')
var father = document.querySelector('.father')
father.addEventListener('click',function(){
alert('father')
},true)
son.addEventListener('click',function(){
alert('son')
},true)
</script>
子盒子 和 父盒子都有点击事件
写true 为捕获阶段,就是点击子盒子 先执行父盒子的事件会再执行子盒子的事件
写false为冒泡阶段,就是点击子盒子 先执行子盒子的事件会再执行父盒子的事件
*传统绑定事件只有冒泡阶段
var div = document.querySelector('div');
div.onclick=function(e) {
console.log(e);
} // e 就是写一个形参来接收事件对象
<ul>
<li>abc</li>
<li>def</li>
<li>ghi</li>
</ul>
<script>
var ul = document.querySelector('ul')
ul.onclick = function (e) {
console.log(e.target); //点哪个li 就返回哪个li
console.log(e.target.nodeName); // LI
console.log(e.type); // click
}
</script>
return false; 也可以实现这个效果,但是return false以下的代码就不执行了,所以用他的时候需将他写在最后
<a href="http://www.baidu.com">百度</a>
<script>
var a = document.querySelector('a')
a.onclick = function (e) {
e.preventDefault(); //阻止默认行为
}</script>
<div class="father">
<div class="son">son儿子</div>
</div>
<script>
var son = document.querySelector('.son')
var father = document.querySelector('.father')
son.onclick = function (e) {
alert('hi')
e.stopPropagation(); // 阻止冒泡 子盒子弹出后 父盒子就不在弹出了
}
father.onclick = function () {
alert('hi1')
e.stopPropagation(); //如果父盒子还有父并且也绑定了事件,也需要阻止
}</script>
<script>
// 鼠标事件对象 MouseEvent
document.addEventListener('click', function(e) {
// 1. client 鼠标在可视区的x和y坐标
console.log(e.clientX);
console.log(e.clientY);
console.log('---------------------');
// 2. page 鼠标在页面文档的x和y坐标
console.log(e.pageX);
console.log(e.pageY);
console.log('---------------------');
// 3. screen 鼠标在电脑屏幕的x和y坐标
console.log(e.screenX);
console.log(e.screenY);
})
</script>
// 键盘事件 keyup 和 keydown 不区分字母大小写 按a 得到的都是65
// keypress 区分大小写 a:97 A:65
document.addEventListener('keyup', function(e) {
console.log(e.keyCode); } //返回ascll值
<script>
// 键盘事件对象中的keyCode属性可以得到相应键的ASCII码值
document.addEventListener('keyup', function(e) {
console.log('up:' + e.keyCode);
// 我们可以利用keycode返回的ASCII码值来判断用户按下了那个键
// keyup 和 keydown 不区分字母大小写 按a 得到的都是65
// keypress 区分大小写 a:97 A:65
if (e.keyCode === 65) {
alert('您按下的a键');
} else {
alert('您没有按下a键')
}
})
document.addEventListener('keypress', function(e) {
console.log('press:' + e.keyCode);
})
</script>
是窗口 (页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、CSS 文件等), 就调用的处理函数。
window.onload = function() {
alert(22);
} //传统注册方式只能写一次 如果有多个就会一最后一个为准
window.addEventListener('load', function() {
alert(22);
}) //侦听注册事件没有限制
仅当DOM加载完成,不包括样式表,图片,flash等等。就可以触发
document.addEventListener('DOMContentLoaded', function() {
alert(33);
})
// load 等页面内容全部加载完毕,包含页面dom元素 图片 flash css 等等
// DOMContentLoaded 是DOM 加载完毕,不包含图片 falsh css 等就可以执行 加载速度比 load更快一些
window.onresize 是调整窗口大小加载事件, 当触发时就调用的处理函数。
window.innerWidth 当前屏幕的宽度
只要窗口大小发生像素变化,就会触发这个事件。
我们经常利用这个事件完成响应式布局。
setTimeout 延时时间到了,就去调用这个回调函数,只调用一次 就结束了这个定时器
setInterval 每隔这个延时时间,就去调用这个回调函数,会调用很多次,重复调用这个函数
var timer = *给定时器一个标识符
var timer = setTimeout(function() {
alert('时间到了')
},毫秒数) //传统写法
var timer = setTimeout(要执行的函数的名, 延迟多少毫秒后执行)
function callback() { //要执行的函数内容
console.log('爆炸了');
} //侦听写法
绑定一个btn 当点击这个的时候 停止定时器
var btn = document.querySelector('button')
var timer = setTimeout(function () {
console.log('要爆炸了');
}, 3000)
btn.onclick = function () {
clearTimeout(timer)
}
location.host *获取主机(域名)
location.port *获取端口号
location.pathname *获取路径
location.hash *获取片段 #后面的内容 常用于链接 锚点
(function(){ })();
(function a (){ }())
e.targetTouches[0] 就可以得到正在触摸dom元素的第一个手指的相关信息比如 手指的坐标等等
*监听 某个元素 的过渡效果
元素名.addEventListener('transitionend', function () { })
var div = document.querySelector('div');
console.log(div.classList); // 返回div 的类名 是伪数组形式
var div = document.querySelector('div');
div.classList.add('three');
var div = document.querySelector('div');
div.classList.remove('one');
var btn = document.querySelector('button')
btn.addEventListener('click', function () {
document.body.classList.toggle('bg')
})
// 如果div 本身有这个类名 就把这个类名删除 如果没有就添加这个类名
1、生命周期为关闭浏览器窗口
2、在同一个窗口(页面)下数据可以共享
3、以键值对的形式存储使用
sessionStorage.setItem('key', value)
sessionStorage.getItem(key)
sessionStorage.removeItem(key)
sessionStorage.clear()
<input type="text">
<button class="set">存储数据</button>
<button class="get">获取数据</button>
<button class="remove">删除数据</button>
<button class="del">清空所有数据</button>
<script>
var ipt = document.querySelector('input');
var set = document.querySelector('.set');
var get = document.querySelector('.get');
var remove = document.querySelector('.remove');
var del = document.querySelector('.del');
// 存储数据
set.addEventListener('click', function () {
// var val = ipt.value
sessionStorage.setItem('uname', ipt.value)
sessionStorage.setItem('set', ipt.value)
sessionStorage.setItem('gey', ipt.value)
})
// 获取数据
get.addEventListener('click', function () {
console.log(sessionStorage.getItem('uname'));
})
// 删除数据
remove.addEventListener('click', function () {
sessionStorage.removeItem('uname')
})
// 清空数据
del.addEventListener('click', function () {
sessionStorage.clear()
})
</script>
1、声明周期永久生效,除非手动删除 否则关闭页面也会存在
2、可以多窗口(页面)共享(同一浏览器可以共享)
3、以键值对的形式存储使用
localStorage.setItem('key', value)
localStorage.getItem('key')
localStorage.removeItem('key')
localStorage.clear()
<input type="text" id="username"> <input type="checkbox" name="" id="remember"> 记住用户名
<script>
var username = document.querySelector('#username');
var remember = document.querySelector('#remember');
if (localStorage.getItem('username')) {
username.value = localStorage.getItem('username');
remember.checked = true; // 复选框的选中状态
}
// 事件
remember.addEventListener('change', function() {
if (this.checked) {
localStorage.setItem('username', username.value);
} else {
localStorage.removeItem('username');
}
})
</script>
输入框名.addEventListener('input', function() {
// 当input框里的内容发生改变 就会执行函数
} )
localStorage.removeItem('key')
localStorage.clear()
<input type="text" id="username"> <input type="checkbox" name="" id="remember"> 记住用户名
<script>
var username = document.querySelector('#username');
var remember = document.querySelector('#remember');
if (localStorage.getItem('username')) {
username.value = localStorage.getItem('username');
remember.checked = true; // 复选框的选中状态
}
// 事件
remember.addEventListener('change', function() {
if (this.checked) {
localStorage.setItem('username', username.value);
} else {
localStorage.removeItem('username');
}
})
</script>
输入框名.addEventListener('input', function() {
// 当input框里的内容发生改变 就会执行函数
} )
文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr
文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc
文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8
文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束
文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求
文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname
文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立
文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码
文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词
文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限
文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定
文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland