Javascript實(shí)現(xiàn)元素選擇器功能
本文實(shí)例為大家分享了Javascript實(shí)現(xiàn)元素選擇器功能的具體代碼,供大家參考,具體內(nèi)容如下
什么是元素選擇器?
用過jquery的開發(fā)者都知道,jquery封裝了對元素的查找功能,即通過jquery的api獲取頁面元素的過程,該過程只需提供一個元素選擇的條件字符串即可獲取相應(yīng)的滿足條件的頁面元素。元素選擇器即是指通過條件字符串獲取相應(yīng)元素的一個工具函數(shù)。
元素選擇器分為id選擇器、class選擇器、標(biāo)簽選擇器以及屬性選擇器。
id選擇器即通過元素的id唯一標(biāo)識獲取元素。
類選擇器即通過元素的class類獲取元素列表。
標(biāo)簽選擇器即通過元素的標(biāo)簽名獲取元素列表。
屬性選擇器即通過元素的屬性獲取元素列表。
元素選擇器的實(shí)現(xiàn)方法可以由javascript的document對象提供的方法來完成,document對象的關(guān)于元素獲取的方法有
1、getElementById
2、getElementsByClassName
3、getElementsByTagName
當(dāng)然還有其它的方法可以獲取頁面的元素,以上三個是比較常用的獲取頁面元素的方法。
一個簡單的元素選擇器實(shí)現(xiàn)
function node(selector) { ?? ?if(selector.indexOf("#")==0) { ?? ??? ?var dom = document.getElementById(selector.substring(1)); ?? ??? ?FE.extend("addClass",dom,addClass); ?? ??? ?FE.extend("removeClass",dom,removeClass); ?? ??? ?FE.extend("prevNode",dom,prevNode); ?? ??? ?FE.extend("value",dom,value); ?? ??? ?FE.extend("styleSettings",dom,styleSettings); ?? ??? ?FE.extend("nextNode",dom,nextNode); ?? ??? ?return dom; ?? ?}else if(selector.indexOf(".")==0) ?{ ?? ??? ?var doms = document.getElementsByClassName(selector.substring(1)); ?? ??? ?var result = []; ?? ??? ?for(var i=0;i<doms.length;i++) { ?? ??? ?FE.extend("addClass",doms[i],addClass); ?? ??? ?FE.extend("removeClass",doms[i],removeClass); ?? ??? ?FE.extend("prevNode",doms[i],prevNode); ?? ??? ?FE.extend("value",doms[i],value); ?? ??? ?FE.extend("styleSettings",doms[i],styleSettings); ?? ??? ?FE.extend("nextNode",doms[i],nextNode); ?? ??? ?result.push(doms[i]); ?? ??? ?} ?? ??? ?return result; ?? ?}else { ?? ??? ?var start = selector.indexOf("["); ?? ??? ?var end = selector.indexOf("]"); ?? ??? ?var tagName = selector.substring(0,start); ?? ??? ?var attrStr = selector.substring(start+1,end); ?? ??? ?var attr = attrStr.split("="); ?? ??? ? ?? ??? ?var doms = document.getElementsByTagName(tagName); ?? ??? ?var result = []; ?? ??? ?for(var i=0;i<doms.length;i++) { ?? ??? ??? ?var attrName = attr[0]; ?? ??? ??? ?var value = doms[i].getAttribute(attrName) ?? ??? ??? ?if("'"+value+"'" == attr[1]) { ?? ??? ?FE.extend("addClass",doms[i],addClass); ?? ??? ?FE.extend("removeClass",doms[i],removeClass); ?? ??? ?FE.extend("prevNode",doms[i],prevNode); ?? ??? ?FE.extend("value",doms[i],value); ?? ??? ?FE.extend("styleSettings",doms[i],styleSettings); ?? ??? ?FE.extend("nextNode",doms[i],nextNode); ?? ??? ?result.push(doms[i]); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?return result; ?? ?} }
元素選擇器實(shí)現(xiàn)總結(jié)
簡單來說元素選擇器實(shí)現(xiàn)了對元素獲取方法的封裝,每次獲取頁面元素時都不需要再次使用document對象提供的方法,只需使用工具函數(shù)node即可獲取頁面元素中滿足selector條件字符串的元素,由于頁面元素還具有其它的共同特性,比如修改元素的class屬性的方法addClass、removeClass,修改和獲取style屬性的方法styleSettings,修改和獲取元素屬性的方法value,以及獲取當(dāng)前元素的上一個元素和下一個元素的方法prevNode、nextNode等。
這些方法可以通過一個擴(kuò)展對象的類方法extend綁定到相應(yīng)的元素上,不需要再次調(diào)用或者寫相應(yīng)的代碼去獲取或者修改,extend類方法允許擴(kuò)展任意對象的任意屬性,在javascript中一切變量都可以看作一個對象,除了簡單的基本類型的變量外,我們可以使用像這樣的代碼來獲取和修改對象的屬性
var o = {name:"fe_spiderman",username:"路爺交歡"} ? /*通過對象引用方式獲取對象的屬性*/ o.name ? /*通過鍵值對的方式獲取對象的屬性*/ o[“name”]
javascript的這種支持極大的豐富了對象的可擴(kuò)展性,想象一下不用去繼承和封裝相應(yīng)的接口來維護(hù)代碼的可讀性帶來的樂趣。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS關(guān)閉窗口與JS關(guān)閉頁面的幾種方法小結(jié)
本篇文章要是對JS關(guān)閉窗口與JS關(guān)閉頁面的幾種方法進(jìn)行了總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12ES6?class類實(shí)現(xiàn)繼承實(shí)例詳解
傳統(tǒng)的javascript中只有對象,沒有類的概念,下面這篇文章主要給大家介紹了關(guān)于ES6?class類實(shí)現(xiàn)繼承的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10HTML 自動伸縮的表格Table js實(shí)現(xiàn)
在開發(fā)的過程中,表格Table有個缺陷,如果一行中某個單元格的超過一行,表格就不夠美觀了。2009-04-04動態(tài)更新highcharts數(shù)據(jù)的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄獎討B(tài)更新highcharts數(shù)據(jù)的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05JS?TypeScript的Map對象及聯(lián)合類型實(shí)戰(zhàn)
這篇文章主要介紹了JS?TypeScript的Map對象及聯(lián)合類型實(shí)戰(zhàn),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08JavaScript將數(shù)字轉(zhuǎn)換成大寫中文的方法
這篇文章主要介紹了JavaScript將數(shù)字轉(zhuǎn)換成大寫中文的方法,涉及javascript字符串及匹配的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03bootstrap table之通用方法( 時間控件,導(dǎo)出,動態(tài)下拉框, 表單驗證 ,選中與獲取信息)代碼分享
這篇文章主要介紹了bootstrap table之通用方法( 時間控件,導(dǎo)出,動態(tài)下拉框, 表單驗證 ,選中與獲取信息)代碼分享,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-01-01文本框只能輸入數(shù)字的實(shí)現(xiàn)方法(兼容IE火狐)
下面小編就為大家?guī)硪黄谋究蛑荒茌斎霐?shù)字的實(shí)現(xiàn)方法(兼容IE火狐)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06js點(diǎn)擊事件的執(zhí)行過程實(shí)例分析【冒泡與捕獲】
這篇文章主要介紹了js點(diǎn)擊事件的執(zhí)行過程,結(jié)合實(shí)例形式分析了js事件機(jī)制中的冒泡與捕獲相關(guān)原理、操作技巧與注意事項,需要的朋友可以參考下2020-04-04