jQuery選擇器是一種非常強(qiáng)大的工具,可以讓開(kāi)發(fā)者輕松地選取DOM元素并對(duì)其進(jìn)行操作。然而,對(duì)于一些常用的選擇器,每次都寫(xiě)一遍會(huì)很繁瑣。因此,我們可以封裝一些常用的選擇器,以便于重復(fù)使用。
//封裝ID選擇器 function $(id){ return document.getElementById(id); } //封裝類(lèi)選擇器 function $$(className){ if(document.getElementsByClassName){ return document.getElementsByClassName(className); }else{ var arr = []; var dom = document.getElementsByTagName('*'); for(var i=0;i<dom.length;i++){ if(dom[i].className == className){ arr.push(dom[i]); } } return arr; } } //封裝標(biāo)簽選擇器 function $$$(tagName){ return document.getElementsByTagName(tagName); }
以上代碼分別封裝了ID選擇器、類(lèi)選擇器和標(biāo)簽選擇器。我們可以對(duì)其進(jìn)行擴(kuò)展,以實(shí)現(xiàn)更靈活的選擇器。例如,我們可以對(duì)類(lèi)選擇器進(jìn)行正則判斷,以兼容一些帶有多個(gè)類(lèi)名的元素。以下是一個(gè)簡(jiǎn)單的擴(kuò)展:
//封裝類(lèi)選擇器+擴(kuò)展 function $$(selector){ if(document.querySelectorAll){ return document.querySelectorAll(selector); }else{ var arr = []; var dom = document.getElementsByTagName('*'); var reg = new RegExp("(^|\\s)" + selector.substring(1) + "(\\s|$)"); for(var i=0;i<dom.length;i++){ if(reg.test(dom[i].className)){ arr.push(dom[i]); } } return arr; } }
在這個(gè)例子中,我們可以使用$$('#test')或者$$('#test .test')來(lái)選取DOM元素,并在IE6/7中兼容多個(gè)類(lèi)名的情況。
通過(guò)封裝常用的選擇器,我們可以使代碼更加簡(jiǎn)潔、靈活,也能提升我們的開(kāi)發(fā)效率。