第七周第五天筆記之DOM庫(kù)

1 DOM庫(kù)創(chuàng)建

  • setCss方法
    • 目的:設(shè)置元素身上的單一的行間樣式
    • 參數(shù):ele:元素,attr:屬性名匈庭,value:屬性值
    • 知識(shí)點(diǎn):
      • 核心設(shè)置ele.style[attr]=value;
      • 針對(duì)特殊的進(jìn)行處理:1)width等屬性竞阐,屬性值為px坡椒,但不添加單位時(shí)企垦,也可以設(shè)置成功;2)針對(duì)透明度的兼容處理思币,最終效果是,但設(shè)置屬性名為opacity時(shí)羡微,封裝好兼容的代碼谷饿;3)浮動(dòng)問(wèn)題,針對(duì)不同瀏覽器進(jìn)行不同的設(shè)置妈倔;
     <body>
     <div id="div1">美好</div>
     <script>
         var oDiv=document.getElementById("div1");
         function setCss(ele, attr, value) {
             //1.針對(duì) width height left top right bottom margin(Left|Right..) padding lineHeight fontSize borderWidth 給其添加單位
             var reg=/(width|height|left|top|right|bottom|lineHeight|borderWidth|fontSize|((margin|padding)(Left|Right|Top|Bottom)?))/g;
             if(reg.test(attr) && !/(auto|%)/.test(value)){
                 value=parseFloat(value)+"px";
             }
             //下面代碼更簡(jiǎn)單
             /*if(reg.test(attr) && !isNaN(value)){
                 value=value+"px";
             }*/
             //2. 針對(duì)透明度的兼容處理
             if(attr=="opacity"){
                 ele.style[attr]=value;
                 ele.style.filter="alpha(opacity="+value*100+")";
                 return;
             }
             //3. 針對(duì)浮動(dòng)
             if(attr=="float"){
                 ele.style.styleFloat=value;//兼容IE
                 ele.style.cssFloat=value;//兼容火狐
                 return;
             }
             //核心設(shè)置
             ele.style[attr]=value;
         }
         setCss(oDiv,"width","50%");
         setCss(oDiv,"lineHeight",200);
         setCss(oDiv,"margin",20);
         setCss(oDiv,"fontSize",30);
         setCss(oDiv,"background","red");
         setCss(oDiv,"opacity",0.3);
         setCss(oDiv,"float","right");
     </script>
     </body>
    
  • setGroupCss方法
    • 目的:設(shè)置一組行間樣式
    • 參數(shù):ele:元素博投,opt:對(duì)象
     <body>
     <div id="div1">美好</div>
     <script src="utils3.js"></script>
     <script>
         var oDiv=document.getElementById("div1");
         function setGroupCss(ele,opt) {
             for(var attr in opt){
                 utils.setCss(ele,attr,opt[attr]);
             }
         }
         setGroupCss(oDiv,{
             width:"50%",
             height:100,
             backgroundColor:"green",
             float:"right"
         })
     </script>
     </body>
    
  • css方法
    • 目的:三合一,集獲取盯蝴,設(shè)置一個(gè)贬堵,設(shè)置一組三者
    • 參數(shù):根據(jù)需要添加
    • 思路:
      • 判斷傳入的實(shí)參,利用arguments结洼,第一個(gè)參數(shù)ele,第二個(gè)參數(shù)(a.字符串a(chǎn)ttr黎做,b.對(duì)象opt),第三個(gè)參數(shù) 屬性值;
      • 判斷條件是傳入幾個(gè)實(shí)參松忍,即實(shí)參的類(lèi)型
    • 知識(shí)點(diǎn)
      • 字符串用typeof判斷蒸殿,對(duì)象用{}.toString()==="[object Object]"判斷是否為真;
    • 代碼:
      • 1)工具庫(kù)代碼:
       css:function (ele) {
               var argTwo=arguments[1];//獲取第二個(gè)參數(shù)
               if(typeof argTwo==="string"){
                   var argThree=arguments[2];//獲取第三個(gè)參數(shù)
                   if(typeof argThree==="undefined"){
                       return this.getCss(ele,argTwo);
                   }else{
                       this.setCss(ele,argTwo,argThree);
                   }
               }
               if(argTwo.toString()==="[object Object]"){
                   this.setGroupCss(ele,argTwo);
               }
           }
      
      • 2)驗(yàn)證代碼:
       <body>
       <div id="div1">美好</div>
       <script src="utils3.js"></script>
       <script>
           var oDiv=document.getElementById("div1");
           utils.css(oDiv,{
               width:"50%",
               height:100,
               backgroundColor:"green",
               float:"right"
           });
           console.log(utils.css(oDiv,"height"));
           console.log(utils.css(oDiv,"width"));
           utils.css(oDiv,"height",200)
       </script>
       </body>
      
  • getChildren方法
    • 目的:獲取容器節(jié)點(diǎn)下的所有元素子節(jié)點(diǎn)集合鸣峭,并獲取指定tagName的元素集合
    • 參數(shù):parent:容器節(jié)點(diǎn)宏所,tagName:指定標(biāo)簽名,可傳可不傳摊溶;
    • 知識(shí)點(diǎn):
      • 獲取元素身上的tagName方法:cur.tagName或cur.nodeName爬骤,二者獲取的都是大寫(xiě)的標(biāo)簽名
      • parent.children,可以獲取父級(jí)元素下所有的元素子節(jié)點(diǎn)莫换,但是在IE8瀏覽器中霞玄,會(huì)將注釋節(jié)點(diǎn)算成元素節(jié)點(diǎn);
    • 代碼:
      • 1)工具庫(kù)代碼:
       getChildren:function (parent, tagName) {
           var ary=[];
           var aChilds=parent.childNodes;
           for(var i=0; i<aChilds.length; i++){
               var cur=aChilds[i];
               if(cur.nodeType==1){
                   if(typeof tagName==="undefined"){
                       ary.push(cur);
                   }else if(cur.nodeName===tagName.toUpperCase()){
                       //獲取元素身上的tagName方法:cur.tagName或cur.nodeName拉岁,二者獲取的都是大寫(xiě)的標(biāo)簽名
                       ary.push(cur);
                   }
               }
           }
           return ary;
       }
      
      • 2)驗(yàn)證代碼:
       <body>
       <div id="wrap">
           <div></div><!--dd-->
           <div></div>
           <div></div>
           <div></div>
           <div></div>
           <p></p>
           <p></p>
           <span></span>
       </div>
       <script src="utils3.js"></script>
       <script>
           var oWrap=document.getElementById("wrap");
           var achilds=utils.getChildren(oWrap);
           console.log(achilds.length);//結(jié)果為8坷剧;
           var achilds1=utils.getChildren(oWrap,"div");
           console.log(achilds1.length);//結(jié)果為5;
           var achilds2=utils.getChildren(oWrap,"span");
           console.log(achilds2.length);//結(jié)果為1喊暖;
       </script>
       </body>
      
  • prevNode方法惫企,nextNode方法,sibling方法
    • preNode方法:獲取元素的上一個(gè)哥哥元素節(jié)點(diǎn)
    • nextNode方法:獲取元素下一個(gè)弟弟元素節(jié)點(diǎn)
    • sibling方法:獲取元素相鄰的兄弟元素節(jié)點(diǎn)集合
    • 知識(shí)點(diǎn):
      • previousElementSiblingnextElementSibling兩者在標(biāo)準(zhǔn)瀏覽器中支持陵叽,在IE5-8瀏覽器中不支持狞尔;
    • 工具庫(kù)代碼:
     //1 元素上一個(gè)哥哥元素節(jié)點(diǎn)
     prevNode:function (ele) {
         if(frg){
             return ele.previousElementSibling;
         }
         pre=ele.previousSibling;
         while(pre && pre.nodeType !==1){
             pre=pre.previousSibling;
         }
         return pre;
     },
     //2 元素的下一個(gè)弟弟元素節(jié)點(diǎn)
     nextNode:function (ele) {
         if(frg){
             return ele.nextElementSibling;
         }
         var nex=ele.nextSibling;
         while(nex && nex.nodeType !==1){
             nex=nex.nextSibling;
         }
         return nex;
     },
     //3 元素的相鄰元素節(jié)點(diǎn)(包含哥哥和弟弟元素節(jié)點(diǎn))
     sibling:function (ele) {
         var pre=this.prevNode(ele);
         var next=this.nextNode(ele);
         var ary=[];
         if(pre) ary.push(pre);
         if(next) ary.push(next);
         return ary;
     }
    
  • prevNodeAll方法丛版,nextNodeAll方法,siblings方法
    • preNodeAll方法:獲取元素所有的哥哥元素節(jié)點(diǎn)集合
    • nextNodeAll方法:獲取元素所有的弟弟元素節(jié)點(diǎn)集合
    • siblings方法:獲取元素所有的兄弟元素節(jié)點(diǎn)集合
    • 工具庫(kù)代碼:
     //4 獲取元素所有的哥哥元素節(jié)點(diǎn)集合
     prevNodeAll:function (ele){
         var ary=[];
         var pre=this.prevNode(ele);
         while(pre){
             //unshift的目的是使元素按著dom順序插入數(shù)組偏序;
             ary.unshift(pre);
             pre=this.prevNode(pre);
         }
         return ary;
     },
     //5 獲取元素所有的弟弟元素節(jié)點(diǎn)集合
     nextNodeAll:function (ele){
         var ary=[];
         var nex=this.nextNode(ele);
         while(nex){
             ary.push(nex);
             nex=this.nextNode(nex);
         }
         return ary;
     },
     //6 元素的所有的相鄰元素節(jié)點(diǎn)
     siblings:function (ele) {
         return this.prevNodeAll(ele).concat(this.nextNodeAll(ele));
     }
    
  • index方法
    • 目的:獲取當(dāng)前元素在容器所有子節(jié)點(diǎn)中的位置硼婿,即索引值(從0開(kāi)始)
    • 獲取:索引值等于當(dāng)前元素所有哥哥元素的個(gè)數(shù)
    • 工具庫(kù)代碼:
     index:function (ele) {
         return this.prevNodeAll(ele).length;
     }
    
  • firstEleChild方法禽车,lastEleChild方法
    • firstEleChild方法:獲取父級(jí)元素中第一個(gè)元素節(jié)點(diǎn)
    • lastEleChild方法:獲取父級(jí)元素中最后一個(gè)元素節(jié)點(diǎn)
    • 工具庫(kù)代碼:
     //1 firstChild 所有子節(jié)點(diǎn)中第一個(gè)元素節(jié)點(diǎn)
     firstEleChild:function (parent) {
         return this.getChildren(parent)[0];
     },
     //2 lastChild 所有子節(jié)點(diǎn)中最后一個(gè)元素節(jié)點(diǎn)
     lastEleChild:function (parent) {
         var ary=this.getChildren(parent);
         return ary[ary.length-1];
     },
    
  • appendChild方法寇漫,prependChild方法,insertBefore方法殉摔,insertAfter方法
    • appendChild方法:插入父級(jí)元素所有子元素節(jié)點(diǎn)的最后一個(gè)
    • prependChild方法:插入父級(jí)元素所有子元素節(jié)點(diǎn)的第一個(gè)
    • insertBefore方法:插入指定子元素節(jié)點(diǎn)的前面
    • insertAfter方法:插入指定子元素節(jié)點(diǎn)的后面
      //1 appendChild 插在父級(jí)元素所有子元素的后面
     appendChild:function (parent,newold){
         parent.appendChild(newold);
     },
     //2 prependChild 插在父級(jí)元素所有子元素的前面
     prependChild:function (parent,newnode) {
         var firstNode=this.firstChild(parent);
         if(firstNode){
             parent.insertBefore(newnode,firstNode);
         }else{
             parent.appendChild(newnode);
         }
     },
     //3 insertBefore 插入到指定子元素節(jié)點(diǎn)的前面
     insertBefore:function (newnode,oldnode) {
         oldnode.parentNode.insertBefore(newnode,oldnode);
     },
     //4 insertAfter 插入到指定子元素節(jié)點(diǎn)的后面
     insertAfter:function (newnode,oldnode) {
         var nexnode=this.nextNode(oldnode);
         if(nexnode){
             this.insertBefore(newnode,nexnode);
         }else{
             this.appendChild(oldnode.parent,newold);
         }
     }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末州胳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子逸月,更是在濱河造成了極大的恐慌栓撞,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碗硬,死亡現(xiàn)場(chǎng)離奇詭異瓤湘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)恩尾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)弛说,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人翰意,你說(shuō)我怎么就攤上這事木人。” “怎么了冀偶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵醒第,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我进鸠,道長(zhǎng)稠曼,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任客年,我火速辦了婚禮霞幅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搀罢。我一直安慰自己蝗岖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布榔至。 她就那樣靜靜地躺著,像睡著了一般欺劳。 火紅的嫁衣襯著肌膚如雪唧取。 梳的紋絲不亂的頭發(fā)上铅鲤,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音枫弟,去河邊找鬼邢享。 笑死,一個(gè)胖子當(dāng)著我的面吹牛淡诗,可吹牛的內(nèi)容都是我干的骇塘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼韩容,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼款违!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起群凶,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤插爹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后请梢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赠尾,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年毅弧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了气嫁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡够坐,死狀恐怖杉编,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咆霜,我是刑警寧澤邓馒,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站蛾坯,受9級(jí)特大地震影響光酣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脉课,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一救军、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倘零,春花似錦唱遭、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春司致,著一層夾襖步出監(jiān)牢的瞬間拆吆,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工脂矫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枣耀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓庭再,卻偏偏與公主長(zhǎng)得像捞奕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拄轻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容