av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

js實(shí)現(xiàn)類選擇器和name屬性選擇器的示例步驟

瀏覽:139日期:2024-04-06 08:15:02

jQuery的出現(xiàn),大大的提升了我們操作dom的效率,使得我們的開發(fā)更上一層樓,如jQuery的選擇器就是一個(gè)很強(qiáng)大的功能,它包含了類選擇器、id選擇器、屬性選擇器、元素選擇器、層級(jí)選擇器、內(nèi)容篩選選擇器等等,很是方便快捷,并且這些選擇器的兼容性都很好,可以說操作dom使用jq選擇器一時(shí)爽,一直使用一直爽!只是,目前Vue、React、Angular三大框架的出現(xiàn)大大降低了JQuery的使用頻率,而且JQuery在操作dom和綁定數(shù)據(jù)時(shí)確實(shí)存在一定的性能問題和各種坑,但依舊不可抹殺jq在操作dom方面的強(qiáng)大存在!

說了JQuery這么多的牛逼之處,那么它的很多內(nèi)部原理是如何實(shí)現(xiàn)的呢?今天就來簡(jiǎn)單實(shí)現(xiàn)一個(gè)類似jQuery的類選擇器和name屬性選擇器。

類選擇器:

function getElementsByClass(className) { var classArr = []; var tags = document.getElementsByTagName('*'); for (var i = 0; i < tags.length; i++) { if (tags[i].nodeType == 1) { if (tags[i].getAttribute('class') == className) { classArr.push(tags[i]); } } } return classArr;}

其實(shí)name屬性選擇器跟類選擇器一樣,只是判斷條件稍微變了一下而已:

function getElementsByName(name) { var nameArr = []; var num = 0; var tags = document.getElementsByTagName('*'); for (var i = 0; i < tags.length; i++) { if (tags[i].nodeType == 1) { if (tags[i].getAttribute('name') == name) { nameArr.push(tags[i]); } } } return nameArr;}

name屬性選擇器大多用在表單的操作方面。

以上代碼中有一個(gè)nodeType的屬性,它是用來判斷節(jié)點(diǎn)的類型,nodeType共有12個(gè)值,1代表節(jié)點(diǎn)元素,2代表屬性,3代表元素或?qū)傩灾械奈谋緝?nèi)容。這三個(gè)數(shù)值用的是比較多的,其他9個(gè)用的不多,想了解的話可以去看一下API。在這里,我們需要得到元素節(jié)點(diǎn),所以就會(huì)判斷當(dāng)前元素的nodeType是否為1。

再來貼一下用遞歸來實(shí)現(xiàn)獲取元素的所有子節(jié)點(diǎn)(含孫子節(jié)點(diǎn)):

/** * 遞歸獲取所有子節(jié)點(diǎn) * node代表想要獲取所有子節(jié)點(diǎn)的父節(jié)點(diǎn) type取值: 1 Element 代表元素 2 Attr 代表屬性 3 Text 代表元素或?qū)傩灾械奈谋緝?nèi)容 4 CDATASection 代表文檔中的 CDATA 部分(不會(huì)由解析器解析的文本) 5 EntityReference 代表實(shí)體引用 6 Entity 代表實(shí)體 7 ProcessingInstruction 代表處理指令 8 Comment 代表注釋 9 Document代表整個(gè)文檔(DOM 樹的根節(jié)點(diǎn)) 10 DocumentType 向?yàn)槲臋n定義的實(shí)體提供接口 11 DocumentFragment 代表輕量級(jí)的 Document 對(duì)象,能夠容納文檔的某個(gè)部分 12 Notation代表 DTD 中聲明的符號(hào) */ var allChildNodes = function (node, type) { // 1.創(chuàng)建全部節(jié)點(diǎn)的數(shù)組 var allCN = []; // 2.遞歸獲取全部節(jié)點(diǎn) var getAllChildNodes = function (node, type, allCN) { // 獲取當(dāng)前元素所有的子節(jié)點(diǎn)nodes var nodes = node.childNodes; // 獲取nodes的子節(jié)點(diǎn) for (var i = 0; i < nodes.length; i++) { var child = nodes[i]; // 判斷是否為指定類型節(jié)點(diǎn) if (child.nodeType == type) { allCN.push(child); } getAllChildNodes(child, type, allCN); } } getAllChildNodes(node, type, allCN); // 3.返回全部節(jié)點(diǎn)的數(shù)組 return allCN; } // 調(diào)用: // 獲取body中全部節(jié)點(diǎn) allChildNodes(document.querySelector(’body’), 1); //獲取body中全部純文本節(jié)點(diǎn) allChildNodes(document.querySelector(’body’), 3)

作者:小壞

出處:http://tnnyang.cnblogs.com

以上就是js實(shí)現(xiàn)類選擇器和name屬性選擇器的示例步驟的詳細(xì)內(nèi)容,更多關(guān)于js實(shí)現(xiàn)類選擇器和name屬性選擇器的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 欧美在线中文字幕 | 色婷婷免费视频 | 偷偷操不一样 | 成年人国产 | 免费三级网站 | 国产一级在线 | 免费黄色一级片 | 国产成人在线免费视频 | 亚洲国产成人91精品 | 国产日本在线观看 | 亚洲一区二区三区四区在线 | www.youjizz.com日本| 中文字幕久久久 | 韩国精品一区二区 | 欧美一级在线播放 | 欧美国产日韩在线 | 国产精品视屏 | 国产精品一区二区不卡 | 99这里有精品 | av免费网站 | 精品黑人一区二区三区国语馆 | 色综合久久88色综合天天 | 一区两区小视频 | 日韩精品少妇 | 国产成人小视频 | 国产女人高潮毛片 | 国产精品黄色 | 美女无遮挡网站 | 日韩免费 | 97视频网站| 日韩免费成人 | 97久久超碰 | 久久精品日韩 | 亚洲天堂久久久 | 一区二区三区高清 | 久久久久国产精品夜夜夜夜夜 | 午夜精品在线观看 | 91精品视频在线 | 国产黄网 | www.久久精品 | 日韩精品视频一区二区三区 |