摘要:笔记引用类型类型创建方法一方法二中使用的元字符因为有特殊的意义所以需要转义如匹配使用构造函数创建的参数因为是字符串所以要进行双重转义如实例属性是否设置了是否这是了是否设置了开始搜索下一个匹配的字符串位置从开始表达式的字符串表示实例方法方法一
笔记
</>复制代码
5. 引用类型
5.4 RegExp 类型
创建 :
方法一
var expression = / pattern / flags
flags: g | i | m
方法二
var expression = new RegExp(pattern, flags) // pattern | flags (string)
pattern中使用的元字符因为有特殊的意义, 所以需要转义. 如:
匹配 "[bc]at" => pattern = /[bc]at/i, 使用构造函数创建的参数因为是字符串所以要进行双重转义, 如:
</>复制代码
/[bc]at/ ==> "[bc]at"
/whello123/ ==> "wwhello123"
5.4.1 实例属性:
</>复制代码
pattern.global // true 是否设置了g
pattern.ignoreCase // true 是否这是了i
pattern.multiline // true 是否设置了m
pattern.lastIndex // 0 开始搜索下一个匹配的字符串位置, 从0开始
pattern.source // "[bc]at" 表达式的字符串表示
5.4.2 实例方法:
方法一 pattern.exec(str)
</>复制代码
var text = "mom and dad and baby"
var pattern = /mom( and dad( and baby)?)?/gi
var matches = pattern.exec(text)
console.log(matches.index) // 0
console.log(matches.input) // "mom and dad and bady"
console.log(matches[0]) // "mom and dad and bady"
console.log(matches[1]) // "and dad and bady"
console.log(matches[2]) // "and bady"
对于exec()方法中模式的g, 即使设置了一次也只会返回一个匹配项, 但是多次调用该方法可以返回新匹配项的信息同时lastIndex会有变化, 而不设置则始终返回第一个匹配项的信息, 如:
</>复制代码
var text = "cat, bat, sat, fat",
pattern1 = /.at/
var matches = pattern1.exec(text)
console.log(matches.index) // 0
console.log(pattern1.lastIndex) // 0
console.log(matches[0]) // cat
var matches = pattern1.exec(text)
console.log(matches.index) // 0
console.log(pattern1.lastIndex) // 0
console.log(matches[0]) // cat
var pattern2 = /.at/g
var matches2 = pattern2.exec(text)
console.log(matches2.index) // 0
console.log(pattern2.lastIndex) // 3
console.log(matches2[0]) // cat
var matches2 = pattern2.exec(text)
console.log(matches2.index) // 5
console.log(pattern2.lastIndex) // 8
console.log(matches2[0]) // cat
IE的lastIndex属性存在偏差, 即使非全局模式下, lastIndex属性也会变化
方法二 pattern.test(str)
如果str如pattern匹配则返回true否则返回false
</>复制代码
var text = "000-00-0000",
pattern = /d{3}-d{2}-d{4}/
if (pattern.test(text)) {
alert("ok!")
}
其他方法
</>复制代码
var pattern = new RegExp("[bc]at", "gi")
pattern.toString() // /[bc]at/gi
pattern.toLocaleString() // /[bc]at/gi
pattern.valueOf() // /[bc]at/gi
5.4.3 RegExp 构造函数属性
</>复制代码
var text = "this has been a short summer",
pattern = /(.)hort/g
if (pattern.test(text)) {
console.log(RegExp.input) // this has been a short summer 最近一次匹配的字符串
console.log(RegExp.leftContext) // this has been a 匹配项左侧文本
console.log(RegExp.rightContext) // summer 匹配项右侧文本
console.log(RegExp.lastMatch) // short 最近一次匹配项
console.log(RegExp.lastParen) // s 最近一次匹配组
console.log(RegExp.multiline) // false 是否使用多行模式
}
也可以使用
</>复制代码
var text = "this has been a short summer",
pattern = /(.)hort/g
if (pattern.test(text)) {
console.log(RegExp.$_) // this has been a short summer 最近一次匹配的字符串
console.log(RegExp.["$`"]) // this has been a 匹配项左侧文本
console.log(RegExp.["$""]) // summer 匹配项右侧文本
console.log(RegExp.["$&"]) // short 最近一次匹配项
console.log(RegExp.["$+"]) // s 最近一次匹配组
console.log(RegExp.["$*"]) // false 是否使用多行模式
}
其他属性RegExp.$1, RegExp.$2 ... RegExp.$9
</>复制代码
var text = "this has been a short summer",
pattern = /(..)or(.)/g
if (pattern.test(text)) {
console.log(RegExp.$1) // sh
console.log(RegExp.$2) // t
}
</>复制代码
15. DOM
15.6.1 创建节点
方法一
创建Element节点document.createElement("tagName")
创建Text节点document.createTextNode("text")
方法二
element.cloneNode(true)
非IE中element.importNode(true)
15.6.2 插入节点
parentNode.appendChild(node)
parentNode.insertBefore(node, parentNode.childNode[i])
注: 如果节点已经存在, 节点将从当前位置删除插入新位置.
15.6.3 替换删除节点
n.parentNode.removeChild(n)
n.parentNode.replaceChild(newNode, n)
15.6.4 DocumentFragment
document.createDocumentFragment()
15.8.1
scrollLeft, scrollTop滚动条位置
</>复制代码
function getScrollOffsets (w) {
w = w || window
// <=IE8不支持, 其他都支持
if (w.pageXOffset != null) return {x: w.pageXOffset, y: w.pageYOffset }
// 标准模式下的IE以及任何浏览器
var d = w.document
if (document.compatMode == "CSS1Compat") return {x: d.documentElement.scrollLeft, y: d.documentElement.scrollTop}
// 怪异模式
return {x: d.body.scrollLeft, y: d.body.scrollTop}
}
clientWidth, clientHeight视口(窗口)尺寸
</>复制代码
function getViewportSize (w) {
w = w || window
// <=IE8不支持, 其他都支持
if (w.innerWidth != null) return {w: w.innerWidth, h: w.innerHeight}
// 标准模式下的IE以及任何浏览器
if (document.campatMode == "CSS1Compat") return {w: d.documentElement.clientWidth, h: d.documentElement.clientHeight}
// 对怪异模式下的浏览器
return {w: d.body.clientWidth, h: d.body.clientHeight}
}
15.8.2 查询元素的几何尺寸
box = e.getBindingClientRect()
</>复制代码
box = {
left: "左上角水平",
top: "左上角垂直",
right: "右下角水平",
bottom: "右下角垂直"
}
内联元素
arr = e.getClientRects()
注: getBindingClientRect, getClientRects不是"实时的"
15.8.3 判断某点上的元素
document.elementFromPoint(x, y)(视口坐标)返回最里面和最上面的元素
15.8.4 滚动
scroll(), scrollTop(), scrollLeft(), scrollTo()
scrollBy()和以上几种方法类似, 但是它是相对的,在当前滚动条的偏移量上增加
setInterval(function() {scrollBy(0, 10)}, 200)
e.scrollIntoView()将元素上边缘放在接近视口的上边缘
e.scrollINtoView(false)将元素下边缘放在接近视口的上边缘, 该方法类似锚点
15.8.5 元素尺寸, 位置, 溢出的更多信息
</>复制代码
offsetWidth clientWidth scrollWidth
offsetHeight clientHeight scrollHeight
offsetLeft clientLeft scrollLeft
offsetTop clientTop scrollTop
offsetParent
offset
offsetWidth, offsetHeight返回不包含margin. 大多数元素返回文档坐标, 但定位和一些其他元素(如表格单元), 返回相对祖先元素非文档, offsetParent返回相对祖先元素, 如果offsetParent为null, 这些属性都是文档坐标
</>复制代码
不包含滚动条的情况
function getElementPosition(e) {
var x = 0, y = 0
while(e != null) {
x += e.offsetLeft
y += e.offsetTop
e = e.offsetParent
}
return {x: x, y:y}
}
client
clientWidth, clientHeight 返回不包含margin border 滚动条 内联元素总返回0, clientLeft clientTop返回包含滚动条
scroll
scrollWidth scrollHeight内容区域加内边距加溢出内容尺寸,scrollLeft scrolTop滚动条的位置, 可写属性, 改写getElementPosition
</>复制代码
function getElementPositon () {
var x = 0, y = 0
for(var e = elt; e != null; e = e.offsetParent) {
x += e.offsetLeft
y += e.offsetTop
}
for (var e = elt.parentNode; e != null && e.noeType == 1; e = e.parentNode) {
x -= e.scrollLeft
y -= e.scrollTop
}
return {x: x, y:y}
}
getElementPosition可以在不支持getBoundingClientRect的浏览器中使用, 但低效, 不可靠, 不支持的浏览器最好用JQuery类库
15.9
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/82670.html
相关文章
-
基础巩固:JavaScript基础总结(基本概念篇)
摘要:基础巩固基础总结使用已经好几年了,由于工作主要是做服务端开发,在工作中逐渐发现的使用范围原来越广泛。这里要注意,务必将基础部分掌握牢靠,磨刀不误砍柴功,只有将基础部分掌握并建立起系统的知识体系,在后面学习衍生的其他模式才能游刃有余。
基础巩固:JavaScript基础总结
使用JavaScript已经好几年了,由于工作主要是做服务端开发,在工作中逐渐发现JavaScript的使用范围原...
-
那些年,我的前端/Java后端书单
摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。
全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。
基础 基础书籍
进阶 进阶阶段,深入学习的书...
-
那些年,我的前端/Java后端书单
摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。
全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。
基础 基础书籍
进阶 进阶阶段,深入学习的书...
-
那些年,我的前端/Java后端书单
摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。
全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。
基础 基础书籍
进阶 进阶阶段,深入学习的书...
-
那些年,我的前端/Java后端书单
摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。
全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。
基础 基础书籍
进阶 进阶阶段,深入学习的书...
-
程序员练级攻略(2018):前端基础和底层原理
摘要:下面我们从前端基础和底层原理开始讲起。对于和这三个对应于矢量图位图和图的渲染来说,给前端开发带来了重武器,很多小游戏也因此蓬勃发展。这篇文章受众之大,后来被人重新整理并发布为,其中还包括中文版。
showImg(https://segmentfault.com/img/bVbjM5r?w=1142&h=640);
想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你!
这...
发表评论
0条评论
Miracle_lihb
男|高级讲师
TA的文章
阅读更多
css整理
阅读 2071·2019-08-30 15:53
网址收集
阅读 3069·2019-08-30 15:44
Array、Set、Map、Object学习总结
阅读 2916·2019-08-30 14:11
代码质量管理——如何写出优雅地代码
阅读 2915·2019-08-30 14:01
position fixed的相对容器是什么
阅读 2701·2019-08-29 15:16
webpack + PostCSS + cssnext
阅读 3738·2019-08-29 13:10
关于viewport引起的微信二维码识别区域偏移的问题讨论与解决
阅读 1243·2019-08-29 10:56
每日一算(日更)
阅读 2530·2019-08-26 13:58
阅读需要支付1元查看
<