js : DOM+BOM(window.location)

DOM: document object model

  • DOM 樹

DOM中元素獲取的方式

  • id獲取: var oDiv = document.getElementById("div1");
    • 注意渗稍,ID獲取只能用document;
  • class獲取:document.getElementsByClassName();
    • 可以限定范圍的獲取元素
  • tagName:可以限定范圍的獲取元素
  • querySelect
    • tag
    • '#id
    • .class
  • querySelectAll
    • tag
    • '#id
    • .class
    • 注意:querySelectAll獲取到的是一組元素拱燃,即使是頁面中唯一的ID力惯,也得加[]獲取哮缺;

節(jié)點

節(jié)點名 nodeType nodeName nodeValue
文本節(jié)點 3 #text 文本內(nèi)容
注釋節(jié)點 8 #comment 注釋內(nèi)容
元素節(jié)點 1 大寫的標簽名 null
document節(jié)點 9 #document null

節(jié)點的關(guān)系

  • children 子節(jié)點
    • 一般情況兼容尝苇,但是在IE6-8下埠胖,如果有注釋的話直撤,拿到的是不準確的;
  • childNodes 拿到所有的子節(jié)點
  • parentNode 父元素谋竖;拿到的是結(jié)構(gòu)上的父級蓖乘;
  • previousSibling 上一個哥哥節(jié)點
  • previousElementSiblings 上一個哥哥節(jié)點
    • 高級瀏覽器支持
  • nextSibling 下一個弟弟節(jié)點
  • getChildren 獲取當前容器下,所有的子元素
  • 實際能拿到所有的孫子輩的
<div class="wrap">
    <div>第一個div</div>
    <!--發(fā)生的發(fā)生的發(fā)生-->
    <div>第二個div</div>
    <a href="#">第1個a元素</a>
    <a href="#">第2個a元素</a>
    <!--是的發(fā)生的發(fā)展的發(fā)-->
    <a href="#">第3個a元素</a>
    是的方法阿魏酸
    <div>第三個div</div>
    <div>第四個div</div>
    是打發(fā)打發(fā)所發(fā)生的
    <span>第1個span</span>
    <!--水電費水電費v水電費水電費-->
    <span>第2個span</span>
    <span>第3個span</span>
</div>
<script>

//需求:獲取限定范圍內(nèi)的所有子節(jié)點
/*
* 1. 目的:獲取一定范圍內(nèi)的所有子節(jié)點
* 2. 參數(shù):1)范圍變量 2)獲取的節(jié)點->可傳可不傳
* 3. 返回值:將最后獲取到的子節(jié)點以數(shù)組的形式返回
*/

/*
* @功能 -> 獲取限定范圍內(nèi)的所有子節(jié)點或特定的子節(jié)點
* @getChildren   -> function getChildren(){}
* @oParent       -> 父級元素,即范圍
* @tagName       -> 所要獲取的元素子節(jié)點 -> 可傳可不傳
*/
// 1. 確定范圍,通過getElementsByClassName獲取到的都是一個數(shù)組握牧,只有一個的時候也需要用[0]來獲取最終的元素
var oWarp = document.getElementsByClassName('wrap')[0];

function getChildren(oParent,tagName){
    var ary = [];
    var aChild = oParent.childNodes;
    for(var i=0;i<aChild.length;i++){
        if(aChild[i].nodeType === 1){
            tagName ? aChild[i].tagName.toLowerCase() == tagName.toLowerCase() && ary.push(aChild[i]): typeof tagName == "undefined"  && ary.push(aChild[i]);
        }
    }
    return ary;
}
//var aChildren = getChildren(oWarp);
</script>
  • prev() 獲取當前元素的上一個哥哥元素
<div class="wrap">
    <div>第一個div</div>
    <!--發(fā)生的發(fā)生的發(fā)生-->
    <div>第二個div</div>
    <a href="#">第1個a元素</a>
    <a href="#">第2個a元素</a>
    <!--是的發(fā)生的發(fā)展的發(fā)-->
    <a href="#">第3個a元素</a>
    是的方法阿魏酸
    <div>第三個div</div>
    <div>第四個div</div>
    是打發(fā)打發(fā)所發(fā)生的
    <span>第1個span</span>
    <!--水電費水電費v水電費水電費-->
    <span>第2個span</span>
    <span>第3個span</span>
</div>
<script>
    /*
     * 1. 目的:獲取當前元素的上個一個哥哥元素
     * 2. 參數(shù):1)當前元素
     * 3. 返回值:返回當前元素的上一個哥哥元素
     **/

    /*
     * @功能 ->獲取當前元素的上個一個哥哥元素
     * @curEle  -> 當前元素
     *
     **/

    /*
     * 1. 獲取當前元素
     * 2. 獲取當前元素的上一個節(jié)點
     */

    var oDiv = document.getElementsByTagName("div")[0];
    var aDiv = oDiv.getElementsByTagName('div');

    function prev(curEle){
        if(curEle.previousElementSibling){
            return curEle.previousElementSibling;
        }
        var prev = curEle.previousSibling;
        while(prev && prev.nodeType !== 1){
            prev = prev.previousSibling;
        }
        return prev;
    }
</script>

next() 獲取當前元素的下一個弟弟元素

<div class="wrap">
    <div>第1個div元素</div>
    <div>第2個div元素</div>
    <div>第3個div元素</div>
    <span>第1個span元素</span>
    <span>第2個span元素</span>
</div>
<script>
    var oWrap = document.getElementsByClassName('wrap')[0];
    var aIndex = oWrap.getElementsByTagName('div');

    function next(curEle){
        if(curEle.nextElementSibling){
            return curEle.nextElementSibling;
        }
        var next = curEle.nextSibling;
        while(next && next.nodeTyp !== 1){
            next = next.nextSibling;
        }
        return next;
    }

</script>

demo : 九九乘法表

<style>
    *{
        margin: 0;
        padding: 0;
        list-style: none;
    }
    ul li{
        height: 40px;
        line-height: 40px;
        font-size: 20px;
        cursor: pointer;
    }
    ul li.change{
        background: lightcyan;
    }
    ul li.bg0{
        background: lightblue;
    }
    ul li.bg1{
        background: lightskyblue;
    }
    ul li.bg2{
        background: lightsteelblue;
    }
    ul li span{
        display: inline-block;
        width: 90px;
        text-align: center;
    }
</style>


<ul></ul>




<script>
    (function(){
        var oUl = document.getElementsByTagName('ul')[0];
        var aLi = oUl.getElementsByTagName('li');
        var str = '';

        for(var i=1;i<10;i++){
            str += "<li>";
            for(var j=1;j<=i;j++){
                str += "<span>"+ j + "x" + i + "=" + j*i +"</span>";
            }
            str += "</li>";
        }
        oUl.innerHTML = str;

    // 思路一:自定義屬性
       /* for(var i=0;i<aLi.length;i++){
            aLi[i].className =  'bg'+ i%3;
            aLi[i].bg = 'bg' + i%3;
            aLi[i].onmouseover = function(){
                this.className = 'change';
            }
            aLi[i].onmouseout = function(){
                this.className = this.bg;
            }
        }*/

       // 思路2: 變量
        for(var i=0;i<aLi.length;i++){
            aLi[i].className = "bg" + i%3;
            var oldBg = null;
            aLi[i].onmouseover = function(){
                oldBg = this.className;
                this.className = 'change';
            }
            aLi[i].onmouseout = function(){
                this.className = oldBg;
            }
        }

    })()

</script>

BOM的知識-window.location

  • 網(wǎng)站的地址構(gòu)成:
    • 協(xié)議+域名+端口號+pathname+'?k=v&k=v'參數(shù)+'#haha'哈希值
      protocol:http/https
      host:域名
      port:端口號
      pathname:文件路徑
      search:?k=v&k=v
      hash:哈希值颂龙;
      href:完整的地址;
      reload:重新加載頁面躲叼;
  • 強制數(shù)據(jù)類型轉(zhuǎn)換的
    1企巢、 比較運算符 ==
    0=='' null==undefined []==0 ![]==false
    function fn(aa){
        if(aa==null){
            //jquery源碼;
        }
    }
    
    2或听、算術(shù)運算符 - * / %
    3笋婿、邏輯運算符
    fn && fn();
    this.Arg||window;
    
    4缸濒、條件判斷語句:
    • 除了false的都是true:false,0,NaN,'',null,undefined
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市霎桅,隨后出現(xiàn)的幾起案子讨永,更是在濱河造成了極大的恐慌,老刑警劉巖揭糕,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件著角,死亡現(xiàn)場離奇詭異旋恼,居然都是意外死亡,警方通過查閱死者的電腦和手機产徊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門舟铜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奠衔,“玉大人塘娶,你說我怎么就攤上這事∪玻” “怎么了刁岸?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長生兆。 經(jīng)常有香客問我难捌,道長,這世上最難降的妖魔是什么鸦难? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮员淫,結(jié)果婚禮上合蔽,老公的妹妹穿的比我還像新娘。我一直安慰自己介返,他們只是感情好拴事,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布圣蝎。 她就那樣靜靜地躺著刃宵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪徘公。 梳的紋絲不亂的頭發(fā)上牲证,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音关面,去河邊找鬼坦袍。 笑死,一個胖子當著我的面吹牛等太,可吹牛的內(nèi)容都是我干的捂齐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼缩抡,長吁一口氣:“原來是場噩夢啊……” “哼奠宜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞻想,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤压真,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后内边,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榴都,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年漠其,在試婚紗的時候發(fā)現(xiàn)自己被綠了嘴高。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竿音。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拴驮,靈堂內(nèi)的尸體忽然破棺而出春瞬,到底是詐尸還是另有隱情,我是刑警寧澤套啤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布宽气,位于F島的核電站,受9級特大地震影響潜沦,放射性物質(zhì)發(fā)生泄漏萄涯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一唆鸡、第九天 我趴在偏房一處隱蔽的房頂上張望涝影。 院中可真熱鬧,春花似錦争占、人聲如沸燃逻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伯襟。三九已至,卻和暖如春握童,著一層夾襖步出監(jiān)牢的瞬間姆怪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工舆瘪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留片效,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓英古,卻偏偏與公主長得像淀衣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子召调,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359