這是我寫的一個操做dom的小例子:css
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo1</title> <!-- Demo styles --> <style> html, body { position: relative; height: 100%; } body { background: #eee; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 14px; color:#000; margin: 0; padding: 0; } </style> </head> <body> <div id="aa"><p>hello</p><p>world</p></div> <div id="bb"></div> <div style="color:#ffa;">1</div> <div>2</div> <div>3</div> <script> function d$(selector){ function Duquery(selector){ this.arr=document.querySelectorAll(selector); this.len=this.arr.length; }; Duquery.prototype.init=function(){ for(var i=0;i<this.len;i++){ this[i]=this.arr[i] }; }; Duquery.prototype.gethtml=function(){ return this[0].innerHTML; }; Duquery.prototype.sethtml=function(arg){ for(var i=0;i<this.len;i++){ this[i].innerHTML=arg; }; return this; }; Duquery.prototype.getcss=function(key){ return this[0].style[key]; }; Duquery.prototype.setcss=function(key,val){ for(var i=0;i<this.len;i++){ this[i].style[key]=val; }; return this; }; var obj=new Duquery(selector); obj.init(); return obj; }; d$("#bb").sethtml(0000); d$(".cc").setcss("color","#ffb").sethtml(999999999999); </script> </body> </html>
看這個位置的代碼:html
利用dom提供的選擇器,咱們能夠找到節點和操做節點,數組
調用後,咱們在預覽就發現元素根據js的處理而變化了。dom
1.querySelectorAll和querySelector兼容性測試
能力檢測屬於經常使用技能之一,咱們看下面的能力檢測代碼:this
<script> if(document.querySelector){ }else{ alert("不支持!"); }; if(document.querySelectorAll){ }else{ alert("不支持!"); }; </script>
結果就是ie6 7不被支持,這個結果是很讓人欣喜的,如今的ie6 7已經被幾乎棄用,這2個方法咱們至少在移動端是能夠完美執行的。spa
2.querySelectorAll和querySelector使用方法prototype
咱們已經很熟悉這兩個選擇器:code
document.getElementById(str); document.getElementsByTagName(str);
寫咱們的html結果,咱們寫個2 3級,有id和class就能夠了:htm
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo1</title> <!-- Demo styles --> <style> html, body { position: relative; height: 100%; } body { background: #eee; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 14px; color:#000; margin: 0; padding: 0; } </style> </head> <body> <div id="aa"> <p>1</p> <p>2</p> <div> <span>3</span> <span>4</span> </div> </div> <div id="bb"> <div class="bb1">5</div> <div class="bb2"> <span>6</span> <span>7</span> </div> </div> </body> <script> document.getElementById(str); document.getElementsByTagName(str); </script> </html>
爲了測試是否選擇到節點,咱們元素內的內容做了區分,利用上面2個老的處理方式咱們輸出1-7。
<script> alert(document.getElementById("aa").getElementsByTagName("p")[0].innerHTML); alert(document.getElementById("aa").getElementsByTagName("p")[1].innerHTML); alert(document.getElementById("aa").getElementsByTagName("div")[0].getElementsByTagName("span")[0].innerHTML); alert(document.getElementById("aa").getElementsByTagName("div")[0].getElementsByTagName("span")[1].innerHTML); alert(document.getElementById("bb").getElementsByTagName("div")[0].innerHTML); alert(document.getElementById("bb").getElementsByTagName("div")[1].getElementsByTagName("span")[0].innerHTML); alert(document.getElementById("bb").getElementsByTagName("div")[1].getElementsByTagName("span")[1].innerHTML); </script>
是如此的麻煩,確定問沒有經過類名獲取的方法嗎?這是是有的,不過兼容性存在問題,假如咱們找.bb1,咱們就要獲取全部元素利用classname進行判斷,有的就存入一個數組最後返回。
咱們利用最新的方法去獲取和返回:
<script> alert(document.querySelectorAll("#aa p")[0].innerHTML); alert(document.querySelectorAll("#aa p")[1].innerHTML); alert(document.querySelectorAll("#aa>div span")[0].innerHTML); alert(document.querySelectorAll("#aa>div span")[1].innerHTML); alert(document.querySelectorAll("#bb .bb1")[0].innerHTML); alert(document.querySelectorAll("#bb .bb2 span")[0].innerHTML); alert(document.querySelectorAll("#bb .bb2 span")[1].innerHTML); </script>
參數就是css選擇器的形式,並且支持>這種關係選擇器,返回的是類數組形式,咱們根據下標就可指定獲取了。
還有一個沒有all的方法,他的用法和上面相同,不過不會以相似數組形式返回,返回的是單個,all的有無就是1和n的區別。
<script> alert(document.querySelector("#aa p").innerHTML); </script>
只會返回第一個p的內容。
3.利用querySelectorAll和querySelector開發tab切換效果
效果很是簡單,咱們簡單實踐開發使用:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo1</title> <!-- Demo styles --> <style> html, body { position: relative; height: 100%; } body { background: #eee; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 14px; color:#000; margin: 0; padding: 0; } .tab{ width:500px; height:500px; background:#CCC; margin:100px;} .tab-nav{ height:40px; line-height:40px; border-bottom:1px solid #fff;} .tab-nav span{ float:left; margin:0 10px;} .tab-nav span.focus{ color:#09F;} .tab-con{ height:450px;} </style> </head> <body> <div class="tab"> <div class="tab-nav"> <span class="focus">菜單1</span> <span>菜單2</span> <span>菜單3</span> </div> <div class="tab-con"> <div>內容1</div> <div style="display:none;">內容2</div> <div style="display:none;">內容3</div> </div> </div> </body> <script> var nlist=document.querySelectorAll(".tab-nav>span"); var clist=document.querySelectorAll(".tab-con>div"); for(var i=0;i<nlist.length;i++){ nlist[i].onclick=function(){ for(var j=0;j<nlist.length;j++){ if(this==nlist[j]){ nlist[j].setAttribute('class',"focus"); clist[j].style.display="block"; }else{ nlist[j].removeAttribute('class'); clist[j].style.display="none"; } }; }; }; </script> </html>