原生JS的常用API

Dom相关:

选中dom元素:

给dom元素增添id,则该id就是JS的全局变量(企业开发不适合):

portfolio.onclick = function () {

    portfolioBar.className = 'bar state-1'

}

ES5以后新增的选择器选中(和CSS选择器规则一致):

返回单个对象

var topNavBar = document.querySelector('#topNavBar')

返回所有数组

var elementList = document.querySelectorAll(selectors)

ES3时使用的选中方式:

选中id(返回单个对象):

var element = document.getElementById(id);

选中类名(返回数组):

var elements = document.getElementsByClassName(names);

选中标签名(返回数组):

var elements = element.getElementsByTagName(tagName)

选中name属性(返回数组):

varelements= document.getElementsByName(name)

监听dom元素的事件:

dom标准0的写法:xxx.onclick =()=>{}

dom标准2的写法:document.addEventListener('onclick ', ()=>{} })

区别:标准0的只能监听1个事件,因为他维护的是一个属性。 标准2的可以维护一个事件队列,所以可以监听多个事件。

监听点击事件:

portfolio1.onclick = function (ev) {

  console.log(ev)

}

监听鼠标移入事件:

liTags[i].onmouseenter = function (ev) {

    console.log(ev)

}

监听鼠标移出事件:

liTags[i].onmouseleave = function (ev) {

  console.log(ev)

}

监听窗口滑动事件:

window.onscroll = function (ev) {

  console.log(ev)

}

监听移动端手指触摸事件

监听移动端手指滑动事件

监听动画完成事件

div.addEventListener('transitionend', ()=>{} )

监听页面被切换事件

document.addEventListener('visibilitychange',function(){

    console.log(document.hidden) //true false

})

浏览器事件触发后,回调函数时传入的ev参数:

ev.target 表示事件触发的dom元素(如果监听a标签,而点击了a里面的span,则此时返回的是span)

ev.currentTarget 表示监听时的dom元素(监听什么,拿到什么)

ev.preventDefault() 表示吞掉默认行为(比如监听a标签,使用该方法后,点击a标签不会自动跳转)

创建dom元素:

var a = document.createElement('a')

给a标签中间,增加文本内容

a.textContent = '你好'

给a增加id的属性:

a.id = 'a-id'

给a标签赋值href属性:

a.href = 'https://www.baidu.com'

把a标签插入到main标签的后面:

document.querySelector('main').appendChild(a)

获取span标签的属性节点name的值:

span.getAttribute("name")

修改span标签的属性节点name的值为123:

span.setAttribute("name","123")

改变dom元素的css样式:

elt.setAttribute("style", "color:red; border: 1px solid blue;");

(下面的方式,谷歌浏览器使用无效)

elt.style.cssText = "color: blue; border: 1px solid black";

dom时钟类api:

创建一个一次性时钟t,3000毫秒(3秒)后,执行函数fn;

function fn(){ alert("Hello") }

var t = setTimeout(fn, 3000);

创建一个重复执行闹钟,每3000毫秒后,执行fn函数

function fn(){ alert("Hello") }

var t =setInterval(fn, 3000);

配置一个一次性执行闹钟t,然后清除一个一次性执行闹钟t

var t = setTimeout(()=>{ console.log('hello') },3000);

clearTimeout(t);

配置一个重复执行闹钟t,然后清除一个重复执行闹钟t

var t =setInterval(()=>{ console.log('hello') }, 3000);

clearInterval(t);

dom元素的类相关api:

给元素a新增类:

a.classList.add(class)

给元素a删除类:

a.classList.remove(class)

给元素a重写所有类(bar和asd):

a.className = 'bar asd '

dom元素寻找亲戚的api:

找到div标签的父亲

div.parentNode

dom元素其他api:

元素距离页面最顶部的距离

element.offsetTop

寻找dom元素a后面的兄弟标签,(注意该方法会连文本也算在兄弟标签内,所以如果要用需要使用套路遍历寻找到下个非文本标签):

var brother = a.nextSibling 

while(brother.nodeType === 3 ||brother === null){

    brother = brother.nextSibling

}

“brother.nodeType === 3 || brother.nodeType!== null”的意思是,如果下一个兄弟是文本或者下个兄弟不是null,那么我继续遍历寻找下一个dom元素

寻找dom元素a前面的兄弟标签(注意点和上面一样):

var brother = a.previousSibling

while(brother.nodeType === 3 || brother === null){

brother = brother.previousSibling

}

取出dom元素中的属性,使用该方法取属性,取的就是浏览器解析之前dom元素所赋值的属性:

let href = aTag.getAttribute('href')

将div2追加到div1的子元素中

div1.appendChild(div2)

深拷贝一个div1元素

var div_clone = div1.cloneNode(true)

div1是否包含div2,判断是否为后代的元素

div1.contains(div2)  // true  false 

判断div1是否有儿子

div1.hasChildNodes() // true  false 

将div2插到div1子元素的最前面

div1.insertBefore(div2)

判断div1与div2 是否内容和属性完全一样(两者在堆区存储的内存地址不同)

div1.isEqualNode(div2)

判断div1与div2 是否为同一个div(两者在堆区存储的内存地址完全相同)

div1.isSameNode(div2)

删除div1的子元素div2(此时删除的div2,并没有从内存中释放,还是会存在内存里的,只是不存在于页面中)

div.removeChild(div2)

替换div1的子元素div2,替换成div3(此时的div2和上面一样,没有从内存中移除)

div1.replaceChild(div3,div2)

将div1里面的所有相领文本节点合并(历史原因出现的API,以前程序员写代码会出现多个相邻文本节点的情况)

div1.normalize()


Bom相关:

打开新的页面,并跳转到指定url:

window.open('http://www.baidu.com')

让用户输入文本,并获取该文本

var text = prompt('请输入一段文本:')

往LocalStorage存东西(只能存储字符串):

localStorage.setItem('容器1', JSON.stringify({name:'linshiqi'}))

从LocalStorage取东西,取不到就返回字符串的null (只能存储字符串):

JSON.parse(localStorage.getItem('容器1') || 'null')




字符串(对象)相关:

获取字符串h的unicode编码(十进制)

'nihao'.charCodeAt(2)

获取字符串h的unicode编码(十六进制)

'nihao'.charCodeAt(2).toString(16)

获取字符串左右两边去除空格和换行符的结果

'   你好   '.trim()// '你好'

连接两个字符串,获取结果

'你'.concat('好')// '你好'

获取字符串的切片结果(第一个参数是开始并包含,最后一个参数是最后的前一个,不包含第二个参数)

'你好呀,我是xxx'.slice(0,2)  // '你好'

替换字符串中的字符(其中第一个参数可以代入正则表达式,符合规则的都会被替换)

'你好呀,我是xxx'.replace('好','不好')  //"你不好呀,我是xxx"

indexOf作用:

可以查找该字符串中是否包含某字符串,如果不包含返回-1,包含返回某字符串在该字符串中的起始位置

parseInt() 可以把一个字符串转换成整数。 

parseFloat() 可以把一个字符串转换成小数。 

typeof() 查看数据类型


数组相关:

向数组a的开头添加一个或更多元素,并返回新的长度。

a.unshift()

删除并返回数组a的第一个元素

a.shift()

向数组a的末尾添加一个或更多元素,并返回新的长度。

a.push()

删除并返回数组a的最后一个元素

a.pop()

颠倒数组a中元素的顺序。

a.reverse()

从数组a中添加/删除项目,然后返回被删除的项目(会改变原数组)。

a.splice( 规定添加/删除项目的位置,    要删除的项目数量,    item1,.....,itemX:向数组添加的新项目)

可从已有的数组中返回选定的元素。

slice( 何处开始选取,    规定从何处结束选取)

遍历数组的所有元素

var a = [1,2,3,4,5]

a.forEach(function(value,key){

    console.log('key:',key)

    console.log('value:',value)

})

遍历数组后,返回每一项都经过函数处理并返回的数组

var a = [1,2,3,4,5]

var b =  a.map(function(value,key){

    return value * 2 

})

遍历数组后,返回每一项都经过函数处理后过滤不需要项的数组

var a = [1,2,3,4,5]

var b = a.filter(function(value,key){

    if (value > 2) return value

})

遍历数组后,每一项的返回结果都依次传递出来(可以模仿前面几种遍历,最灵活)

模仿filter:

var a = [1,2,3,4,5]

var b = a.reduce(function(arr,value){

    if(value>2){arr.push(value)}

    return arr

},[])

数组与字符串拼接,返回一个字符串,代入一个值后拼接数组中的每一项的值

var a = [1,2,3,4,5]

var b = a.join('+')

数组与数组拼接,返回一个数组(新的数组),代入一个数组后追加到原数组拷贝的数组后面

var a = [1,2,3,4,5]

var b = a.concat([3,2,1])

数组排序

升序:

var arr = [4,3,6,5,7,2,1];

arr.sort();

console.log(arr);

降序:

var arr = [4,3,6,5,7,2,1];

arr.sort();

arr.sort(function(a,b){

    return b-a;

});

console.log(arr);


数字、布尔、symbol(对象)相关:

函数相关:

对象、原型相关:

删除对象中的key和value:

var obj = {name:'linsq',age:20}

delete obj['age']

查找对象中是否拥有该key:

'name' in obj  // true

'age' in obj  // false

遍历对象中的所有key和value,顺序是随机的:

for(let key in obj){

    console.log(key,obj[key])

}  

//name linsq

获取对象的类型(注意:null显示的是object,函数包括所有构造函数显示的是function):

typeof obj //"object"

typeof Array  //"function"

typeof Object //"function"


JSON相关:

用于将 JavaScript 值转换为 JSON 字符串。

JSON.stringify()

用于将一个 JSON 字符串转换为 JavaScript 对象。

JSON.parse()


布尔值其他五种类型中的false情况(如果不是下面五种,则代表是true):

number:0、NaN

Sting: ''(空字符串)

null:null (该类型里没有true的值)

undefined:undefined(该类型里没有true的值)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容