摘要:筆記引用類型類型創(chuàng)建方法一方法二中使用的元字符因為有特殊的意義所以需要轉(zhuǎn)義如匹配使用構(gòu)造函數(shù)創(chuàng)建的參數(shù)因為是字符串所以要進行雙重轉(zhuǎn)義如實例屬性是否設(shè)置了是否這是了是否設(shè)置了開始搜索下一個匹配的字符串位置從開始表達式的字符串表示實例方法方法一
筆記
5. 引用類型
5.4 RegExp 類型
創(chuàng)建 :
方法一
var expression = / pattern / flags
flags: g | i | m
方法二
var expression = new RegExp(pattern, flags) // pattern | flags (string)
pattern中使用的元字符因為有特殊的意義, 所以需要轉(zhuǎn)義. 如:
匹配 "[bc]at" => pattern = /[bc]at/i, 使用構(gòu)造函數(shù)創(chuàng)建的參數(shù)因為是字符串所以要進行雙重轉(zhuǎn)義, 如:
/[bc]at/ ==> "[bc]at" /whello123/ ==> "wwhello123"
5.4.1 實例屬性:
pattern.global // true 是否設(shè)置了g pattern.ignoreCase // true 是否這是了i pattern.multiline // true 是否設(shè)置了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, 即使設(shè)置了一次也只會返回一個匹配項, 但是多次調(diào)用該方法可以返回新匹配項的信息同時lastIndex會有變化, 而不設(shè)置則始終返回第一個匹配項的信息, 如:
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 構(gòu)造函數(shù)屬性
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 匹配項左側(cè)文本 console.log(RegExp.rightContext) // summer 匹配項右側(cè)文本 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 匹配項左側(cè)文本 console.log(RegExp.["$""]) // summer 匹配項右側(cè)文本 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 創(chuàng)建節(jié)點
方法一
創(chuàng)建Element節(jié)點document.createElement("tagName")
創(chuàng)建Text節(jié)點document.createTextNode("text")
方法二
element.cloneNode(true)
非IE中element.importNode(true)
15.6.2 插入節(jié)點
parentNode.appendChild(node)
parentNode.insertBefore(node, parentNode.childNode[i])
注: 如果節(jié)點已經(jīng)存在, 節(jié)點將從當(dāng)前位置刪除插入新位置.
15.6.3 替換刪除節(jié)點
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: "右下角垂直" }
內(nèi)聯(lián)元素
arr = e.getClientRects()
注: getBindingClientRect, getClientRects不是"實時的"
15.8.3 判斷某點上的元素
document.elementFromPoint(x, y)(視口坐標)返回最里面和最上面的元素
15.8.4 滾動
scroll(), scrollTop(), scrollLeft(), scrollTo()
scrollBy()和以上幾種方法類似, 但是它是相對的,在當(dāng)前滾動條的偏移量上增加
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. 大多數(shù)元素返回文檔坐標, 但定位和一些其他元素(如表格單元), 返回相對祖先元素非文檔, 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 滾動條 內(nèi)聯(lián)元素總返回0, clientLeft clientTop返回包含滾動條
scroll
scrollWidth scrollHeight內(nèi)容區(qū)域加內(nèi)邊距加溢出內(nèi)容尺寸,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
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82670.html
摘要:基礎(chǔ)鞏固基礎(chǔ)總結(jié)使用已經(jīng)好幾年了,由于工作主要是做服務(wù)端開發(fā),在工作中逐漸發(fā)現(xiàn)的使用范圍原來越廣泛。這里要注意,務(wù)必將基礎(chǔ)部分掌握牢靠,磨刀不誤砍柴功,只有將基礎(chǔ)部分掌握并建立起系統(tǒng)的知識體系,在后面學(xué)習(xí)衍生的其他模式才能游刃有余。 基礎(chǔ)鞏固:JavaScript基礎(chǔ)總結(jié) 使用JavaScript已經(jīng)好幾年了,由于工作主要是做服務(wù)端開發(fā),在工作中逐漸發(fā)現(xiàn)JavaScript的使用范圍原...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純原創(chuàng),且將持續(xù)更新,未經(jīng)許可,不得進行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進階 進階階段,深入學(xué)習(xí)的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純原創(chuàng),且將持續(xù)更新,未經(jīng)許可,不得進行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進階 進階階段,深入學(xué)習(xí)的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純原創(chuàng),且將持續(xù)更新,未經(jīng)許可,不得進行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進階 進階階段,深入學(xué)習(xí)的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純原創(chuàng),且將持續(xù)更新,未經(jīng)許可,不得進行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動手點點贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進階 進階階段,深入學(xué)習(xí)的書...
摘要:下面我們從前端基礎(chǔ)和底層原理開始講起。對于和這三個對應(yīng)于矢量圖位圖和圖的渲染來說,給前端開發(fā)帶來了重武器,很多小游戲也因此蓬勃發(fā)展。這篇文章受眾之大,后來被人重新整理并發(fā)布為,其中還包括中文版。 showImg(https://segmentfault.com/img/bVbjM5r?w=1142&h=640); 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 這...
閱讀 2076·2019-08-30 15:53
閱讀 3073·2019-08-30 15:44
閱讀 2921·2019-08-30 14:11
閱讀 2918·2019-08-30 14:01
閱讀 2707·2019-08-29 15:16
閱讀 3751·2019-08-29 13:10
閱讀 1249·2019-08-29 10:56
閱讀 2533·2019-08-26 13:58