js-扩展-Dom与事件

```text

# dom 文档对象模型,document object model

### 获取dom(js中的选择器)

js

let list=document.getElementById('list')

let liReds=document.getElementsByClassName('liRed')//collection集合,拥有和数组几乎完全一致的方法等

let lis=document.getElementsByTagName('li')//collection集合,可以理解为伪数组

### dom都可以做什么?

#### 1.改变html的输出流(说人话:可以把内容输出到页面上)

js

document.write(new Date())

#### 2.改变html的内容

js

liReds[1].innerHTML='哈哈哈'

#### 3.改变html属性

js

list.title='12345678'

#### 4.改变html样式

js

liReds[1].style.color='red'

#### 5.使用事件

鼠标事件:onmouseover,onmouseenter,onmousedown,onmouseup,onmousewheel,onmousemove,onmouseleave,onmouseout,onclick

键盘事件:onkeydown,onkeyup,onkeypress(不咋用)

窗口事件:onload,onscroll 滚动事件

表单事件:onfocus 获得焦点, onblur 失去焦点, onsubmit 提交, oninput ,onchange

```

## /js-扩展-onblur、oninput、onchange

```text

### onchange只有在元素发生改变时才会运行,onblur只要失去焦点就运行,oninput 事件在用户输入时触发。

js

let ipt=document.getElementById('ipt')

let  screen=document.getElementById('screen')

ipt.oninput=function () {

screen.innerHTML=ipt.value

}

ipt.onchange=function () {

console.log(111)

screen.innerHTML=ipt.value

}

ipt.onblur=function () {

console.log(111)

screen.innerHTML=ipt.value

}

```

## /js-扩展-字符串

```text

### 字符串的声明

js

let str1=''

let str2=""

let str3=`是Es6的新语法`

### charAt()返回在指定位置的字符,空格也占位置,几乎不用,用str[3]来代替

js

let str4="I am a student!"

console.log( str4.charAt(3))

console.log(str4[3])

### concat 连接两个字符串,生成新的字符串,一般不用,用+号更好

js

console.log(str4.concat(str3))

### JavaScript奇技淫巧之快速把数字转换成字符串

js

let num=123

console.log(num+'')

### endsWith()与startsWith()

endsWith() 判断当前字符串是否已指定字符串结尾,区分大小写,返回布尔值

startsWith()判断当前字符串是否已指定字符串开头,区分大小写,返回布尔值

js

let str4="I am a student!"

console.log(str4.endsWith('nt!'))

console.log(str4.startsWith('I'))

### indexOf返回某字符串在当前字符串中首次出现的位置,如果没有,则返回 -1

let str4="I am a student!"

console.log(str4.indexOf('a'))

### lastIndexOf() 使用方法遇上相同,返回字符串在当前字符串中最后出现的位置

### includes 查找字符串中是否存在指定的字符串

js

let str4="I am a student!"

console.log(str4.includes('a'))

### match 查找到一个或多个正则表达式的匹配

js

let str4="I am a student!"

console.log(str4.match(/\ba\b/))//'\b'字符边界

console.log(str4.match(/a/g))

console.log(str4.match(/b/g))//不加g,查找到第一个结果就结束并输出,加了g,找到一个不结束,继续找,直到把所有满足条件的字符串都出找出来位置,如果找不到,则输出null

### repeat 复制字符串指定的次数,并连接在一起返回

js

let str4="I am a student!"

console.log(str4.repeat(3))

### replace在字符串中查找对应的子串,然后替换成新内容,生成新字符串,

js

let str4="I am a student!"

console.log(str4.replace("a",'b'))//正则后面可以加g,则所有满足条件的字符串都将被替换

### replaceAll

js

let str4="I am a student!"

console.log(str4.replaceAll("a",'b'))//不能用正则,所有a都将被替换

### search查找字符串中满足正则的字符串,返回索引

js

let str5="abcdeFG1234567higklmn"

console.log(str5.search(/\d{7}/))

### slice从字符串中截取某部分

js

let str5="abcdeFG1234567higklmn"

console.log(str5.slice(7,14))

### split以某字符为界限,切割字符串,生成新数组

js

let str5="abcdeFG1234567higklmn"

console.log(str5.split('')) //以空为界限切割字符串

### substring() 从字符串中提取指定两个索引间的字符串

js

let str5="abcdeFG1234567higklmn"

console.log(str5.substring(7,14))

### substr() 从字符串中,从指定位置,提取指定数量的字符串

js

let str5="abcdeFG1234567higklmn"

console.log(str5.substr(7,14))

### toLowerCase生成新字符串,把原来的所有字母改为小写

js

let str5="abcdeFG1234567higklmn"

console.log(str5.toLowerCase())

### toUppercase把原来的所有字母改为大写

js

let str5="abcdeFG1234567higklmn"

console.log(str5.toUpperCase())

### trime()去掉字符串两边的空格

js

let str6=' abc def '

console.log(str6.trim())

### toString,将元素变成字符串形式

js

let a =123

console.log(a.toString())

console.log(String(a))

console.log(a+'')//最简

```

## /js-扩展-字符串-练习

```text

### 写一个函数,可以生成随机的颜色

js

function randColor() {

return`rgb(${parseInt(Math.random()*256)},${parseInt(Math.random()*256)},${parseInt(Math.random()*256)})`

// return "rgb("+parseInt(Math.random()*256)+","+parseInt(Math.random()*256)+","+parseInt(Math.random()*256)+')'

}

list.style.background=randColor()

// list.style.color=randColor()

/* //相同颜色

let color=randColor()

list.style.background=color

list.style.color=color*/

```

## /js-扩展-数组方法

```text

### unshift前面添加,shift前面删除,push后面添加,pop后面删除,splice任意位置的添加和删除

### concat()连接两个或更多数组,并返回结果  , A.concat(B)

### copyWithin 从数组的指定位置拷贝元素到另一个指定位置

### every()判断数组中,是否所有元素都满足回调函数中的条件,满足返回true

js

let arr=[2,4,6,9,10]

console.log(arr.every(item =>item%2===0))

//能被4整除,不能被100整除,或者被400整除是闰年

let years=[2000,2004,2008]

console.log(years.every( item=> item%4===0&&item%100!==0||item%400===0))

### 过滤 筛选filter

js

let arr2=[1,2,3,4,5,6,7,8,9]

let arr3= arr2.filter(item=>item%2===1)//把元素组中所有满足此条件的元素组成新数组

console.log(arr3)

let arr4=arr3.map(item=>item*2)

console.log(arr4)

let total=arr4.reduce((pre,next)=>pre+next,0)

console.log(total)

#### 一行搞定,链式调用

js

let arr2=[1,2,3,4,5,6,7,8,9]

console.log(

arr2.filter(item=>item%2===1)

.map(item=>item*2)

.reduce((pre,next)=>pre+next,0)

)

#### 没有filter过滤,map映射,reduce等高阶函数时,我们要使用一下代码来实现上一行功能

js

let arr2=[1,2,3,4,5,6,7,8,9]

var brr=[]

for (var i =0;i<arr2.length;i++){

if(arr2[i]%2===1){

brr.push(arr2[i])

}

}

console.log(brr)

for(var i=0;i<brr.length;i++){

brr[i]=brr[i]*2

}

console.log(brr)

var result=0

for (var i =0 ;i<brr.length;i++){

result=result+brr[i]

}

console.log(result)

### typeof判断是否为字符串

js

console.log(typeof('123'==='string'))

let arr7=['a','b','c']

arr7.every(item=>typeof item==='string')

console.log(typeof typeof 123)//输出string

### find,判断数组中是否有某个值,如果是undefined则没有

js

let arr2=[1,2,3,4,5,6,7,8,9]

console.log(arr2)

console.log(arr2.find(item=>item===3))

const arr8=[

{account:123456, password:'abcdefg'},

{account:123457, password:'abcdefg'},

{account:123458, password:'abcdefg'},

{account:123459, password:'abcdefg'}

]

console.log(arr8.find(item=>item.account===123458))

### findIndex查找对应元素的索引

js

const arr8=[

{account:123456, password:'abcdefg'},

{account:123457, password:'abcdefg'},

{account:123458, password:'abcdefg'},

{account:123459, password:'abcdefg'}

]

console.log(arr8.findIndex(item=>item.account===123458))

### forEach跟map几乎一直,但是没有返回值,不能链式调用

js

let arr2=[1,2,3,4,5,6,7,8,9]

arr2.forEach((item,index)=>arr2[index] = item*2)

console.log(arr2)

### from

js

let arr2=[1,2,3,4,5,6,7,8,9]

arr2=Array.from(arr2,item=>item/2)

console.log(arr2)

### includes 判断数组中是否包含指定的值

### indexOf 搜索数组中的元素,并返回他所在位置

### lastIndexOf 返回他最后出现的位置

### isArray 判断是否是一个数组

js

const arr8=[

{account:123456, password:'abcdefg'},

{account:123457, password:'abcdefg'},

{account:123458, password:'abcdefg'},

{account:123459, password:'abcdefg'}

]

console.log(Array.isArray(arr8[0]))

### 判断是否为对象

js

const arr8=[

{account:123456, password:'abcdefg'},

{account:123457, password:'abcdefg'},

{account:123458, password:'abcdefg'},

{account:123459, password:'abcdefg'}

]

console.log(typeof arr8[0]==='object'&&arr8.length===undefined)

console.log(typeof arr8[0]==='object'&&!arr8.length)

//弱类型转换 null, undefined, '', NaN, 0 被转换证布尔值false

### join 数组转换字符串

js

let arr2=[1,2,3,4,5,6,7,8,9]

console.log( arr2.join())

### reverse 反转数组

js

let arr2=[1,2,3,4,5,6,7,8,9]

console.log(arr2.reverse())

### 反转字符串

js

let strA='a,b,c,d,e,f,g'

console.log(strA.split(',').reverse().join())

let strB='abcdefg'   //gfedcba

console.log(strB.split('').reverse().join(''))

### map() 映射

### reduceRight() 从右往左计算

### slice() 选取数组中的一部分,返回新数组

### some() 检测数组中是否有元素符合条件,跟includes相同

### sort() 对数组元素排序

js

let arr9=['Banner','Orange','Apple','Mango']

arr9.sort()//默认按照字母升序排列

console.log(arr9)

let arr10=[8,7,45,3,9,97]

arr10.sort()//默认按照字母的升序排列

console.log(arr10)

//按照数字升序排列

arr10.sort((next,pre)=>next-pre)//下一个值减前一个值为正数

console.log(arr10)

//数字降序排列

arr10.sort((next,pre)=>pre-next)

console.log(arr10)

//数组乱序

let arr11=['a','b','c','d','e','f','g','h','i','j','k']

console.log(arr11.sort(()=>Math.random()-.5))

### toString()数组转字符串

```

## /js-扩展-Object对象

```text

### 一

js

let gender='男'

let obj1={

name:'小明',

age: 18,

hobbies:['吃饭','睡觉','打豆豆'],

able:function () {

console.log('正在学习')

},

gender

}

console.log(obj1.name)//最优

console.log(obj1['age'])

obj1.hobbies.map(item=>console.log(item))//map是有返回值的,会生成一个新数组

obj1.hobbies.forEach(item=>console.log(item))//更优

obj1.able()

### 二

js

function able(){

console.log('正在学习')

}

let gender='男'

let obj1={

name:'小明',

age: 18,

hobbies:['吃饭','睡觉','打豆豆'],

able,

gender

}

console.log(obj1.name)//最优

console.log(obj1['age'])

obj1.hobbies.map(item=>console.log(item))//map是有返回值的,会生成一个新数组

obj1.hobbies.forEach(item=>console.log(item))//更优

able()

```

## /js-扩展-作用域

```text

### var可以重复声明,let不可以

js

var test=1//var可以重复声明,let不可以

var test=2

var j=3

for (var j=0;j<arr11.length;j++){

console.log(j)//内存泄漏

}

console.log(j)

let test2=1

// let test2=1  //let 不允许重复声明

### 作用域: 全局作用域/ 局部作用域/ es6新增块级作用域

js

let m=3

for (let m=0;m<arr11.length;m++){}

console.log(m)//3

js

var n=1

function xxx() {

console.log(n)//undefined暂时性死区,作用域内一旦var/let声明了某变量,那么此作用域就不会查找该变量

var n=2//var 存在变量提升,作用域内后面声明了变量,则在前面也可以使用之,只不过其值为undefined

console.log(n)//2

}

xxx()

console.log(n)//2

js

let x=1

function yyy() {

console.log(x)//1

x=2

console.log(x)//2

}

yyy()

console.log(x)//2

js

let p=1

function ppp() {

console.log(p)//p在这里不存在,不是undefined,但是由于局部作用域内声明了p,所以暂时性死区,不会像外界获取p,**会直接报错**

let p=2//let不存在变量提升

console.log(p)//

}

ppp()

console.log()//

```

js拓展-Dom与事件,字符串,数组方法,object对象,作用域的更多相关文章

  1. JS获取DOM元素的八种方法

    JS获取DOM元素的方法(8种) 通过ID获取(getElementById) 通过name属性(getElementsByName) 通过标签名(getElementsByTagName) 通过类名 ...

  2. JS 操作符、控制流程、循环、字符串/数组方法

    操作符 算术运算符:+ .- . * . / . %.++.-- 赋值运算符:= .+=.-=. *=./=.%= 比较运算符:>.>=.<.<=.!=.==.===(全等,数 ...

  3. JS中的事件、数组、节点对象处理

    在JS代码中编写事件一定要保证页面在浏览器中加载时会把事件加载进页面 事件:在代码中可以通过一个动作来触发另一个行为的总称 A:事件的编写方式1 HTML标签中添加 onxxxx = "函数 ...

  4. js之DOM和事件

    DOM 查找 直接查找 var obj = document.getElementById('i1') 间接查找 文件内容操作: innerText 仅文本 innerHTML 全内容 value i ...

  5. js中常用的操作字符串的方法大全

    charCodeAt()返回一个整数,代表指定字符的Unicode编码 fromCharCode()从一些Unicode字符串得到一个字符串  charAt()根据指定下标位置返回对应字符,如果下标超 ...

  6. js --- 关于DOM的事件操作

    一.JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象 ...

  7. DOM中事件绑定补充方法

    先将上一篇文章中提到的为元素增加事件的方法和移除事件的方法拿过来: <span style="font-size:18px;">//跨浏览器添加事件 function ...

  8. 使用js在HTML中自定义字符串格式化方法

    Python中支持字符串格式化,其基本形式如下: str = "I'm {name},{age} years old" print(str.format(name="te ...

  9. 适合MCU用的C语言快速互转HEX(16进制)和原始字符串/数组方法

    缘由 这个起因是昨晚群里有人在讨论怎么把字符串转成HEX方法最佳,讨论到最后变成哪种方法效率最优了.毕竟这代码是要在MCU上面跑的,要同时考虑到时间和空间的最优解. 当然讨论的是有结果的,具体实现的方 ...

  10. es6新增的数组方法和对象

    es6新增的遍历数组的方法,后面都会用这个方法来遍历数组,或者对象,还有set,map let arr=[1,2,3,4,3,2,1,2]; 遍历数组最简洁直接的方法法 for (let value ...

随机推荐

  1. 万星开源项目强势回归「GitHub 热点速览 v.22.38」

    本周霸榜的 GitHub 项目多为老项目,比如:老面孔的 theatre 凭借极其优秀的动画功底连续三天霸榜 TypeScript 类目.借 Figma 被 Adobe 收购之风,又出现在 GitHu ...

  2. Java 异步编程 (5 种异步实现方式详解)

    ​ 同步操作如果遇到一个耗时的方法,需要阻塞等待,那么我们有没有办法解决呢?让它异步执行,下面我会详解异步及实现@mikechen 目录 什么是异步? 一.线程异步 二.Future异步 三.Comp ...

  3. 使用SkyWalking监控nginx (以openresty为例)

    安装使用SkyWalking先看这篇文章,地址:https://www.cnblogs.com/sanduzxcvbnm/p/15829781.html 使用SkyWalking监控nginx借助的是 ...

  4. CentOS7使用yum方式安装Containerd

    # 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-m ...

  5. 使用Elasticsearch的processors来对csv格式数据进行解析

    来源数据是一个csv文件,具体内容如下图所示: 导入数据到es中 有两种办法,第一种是在kibana界面直接上传文件导入 第二种方法是使用filebeat读取文件导入 这里采用第二种办法 配置文件名: ...

  6. OpenJudge 1.5.35:求出e的值

    35:求出e的值 总时间限制:1000ms 内存限制:65536kB 描述 利用公式e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! 求e . 输入 输入只有一行,该行包 ...

  7. ofd格式文件转换成pdf格式的方法

    ofd格式文件很多人还比较陌生,很多人接收到文件都不知如何打开阅读,把文件发给对方,还需要对方安装个专门的阅读软件,我们还有另一个办法,就是将OFD文件转换为PDF格式文件,然后把PDF格式文件发给对 ...

  8. day03-MySQL基础知识02

    MySQL基础知识02 4.CRUD 数据库CRUD语句:增(create).删(delete).改(update).查(Retrieve) Insert 语句 (添加数据) Update 语句(更新 ...

  9. P8548 小挖的买花 方法记录

    原题链接 小挖的买花 题目背景 小挖喜欢买花,但是 ta 太懒了!所以这个任务全权交给了你. 题目描述 花店里只有 \(n\) 株花,每一株花都有三个属性:价格 \(cost_i\).美丽度 \(be ...

  10. 后端框架学习-----mybatis(使用mybatis框架遇到的问题)

    1.配置文件没有注册(解决:在核心配置文件中注册mapper,注册有三种形式.资源路径用斜杆,包和类用点) <mappers> <!--每一个mapper.xml文件都需要在myba ...