05-javascript基礎學習筆記

1.節點的操作###

根據后臺返還的數據來創建節點,之前寫的操作:寫好頁面結構,通過dom樹獲取節點,再對獲取的節點進行操作,今天學習一下dom節點的創建、添加、刪除和插入

首先獲取父元素
var body = document.getElementsByTagName("body")[0];

  • 創建并添加節點
    /* 1. 添加節點的相關操作*/
    var btnAdd = document.getElementsByTagName("button")[0];
    var box;
    btnAdd.onclick = function () {
        /*1.2 創建節點(一般通過document來創建)*/
        box = document.createElement("div");
        /*設置屬性*/
        box.style.width = 100 + "px";
        box.style.height = 100 + "px";
        box.style.background = "yellow";
        /* 1.3 添加節點(一般通過父節點來添加)*/
        body.appendChild(box);
    };
  • 刪除節點
 /* 2. 刪除節點的相關操作,一半通過父節點來操作*/
    var btnDel = document.getElementsByTagName("button")[1];
    btnDel.onclick= function () {
        body.removeChild(box);
    };
  • 插入節點
    /* 3. 插入節點的相關操作,一般通過父節點來操作*/
    var btnIns = document.getElementsByTagName("button")[2];
    btnIns.onclick = function () {
        //創建節點
        var box1 = document.createElement("div");

        //設置屬性
        box1.style.width = 100+"px";
        box1.style.height = 100+"px";
        box1.style.background = "pink";

        //插入節點,也是通過父節點
        //第一個參數表示要插入的節點,第二個表示被插入的節點
        body.insertBefore(box1,box);
    };
  • 節點的獲取(子節點、父節點、兄弟節點)
    子節點的獲取(返回偽數組)
獲取box下面的子節點,childNodes獲取文本節點,但是我們一般不需要文本節點,需要標簽節點
var  rst = box.childNodes;

我們一般獲取子節點通過children獲取,因為我們需要的是標簽節點
    var myChildren = box.children;
    console.log(myChildren.length);
  • 兄弟節點
兼容性問題
                    
    //1.獲取btn1
    var btn1 = document.getElementById("btn1");
    //2.獲取兄弟節點
    /* nextElementSibling:獲取標簽元素,一般瀏覽器可以實現對應的效果
     * IE瀏覽器不能有對應的效果,但是nextSibling可以在ie獲取標簽元素
      * 所以我們需要兼容*/
    var brotherSym = btn1.nextElementSibling||btn1.nextSibling;
    console.log(brotherSym);
  • 父節點
    //1.獲取btn1
    var btn1 = document.getElementById("btn1");
    //2.獲取父節點
    var parentSym = btn1. parentNode;
    console.log(parentSym);

2.date的認識###

1.創建時間對象,表示當前的時間
var myDate = new Date();

2.當前時間的時間戳,獲取的是1970年1月1日開始的毫秒數,用來紀念unix誕生的時間
var minS = myDate.getTime();

3.32位最大只能存儲2的32次方,所以32位電腦上date對象最大只能獲取到2038年之前的時間

4.定義自己的時間戳
var myDate = new Date("2017/07/03 18:20:20");

5.date對象的相關方法

//    1.創建時間對象
    var myDate = new Date();
//    2.1獲取當前年份
    var year = myDate.getFullYear();
//    2.2獲取月份,獲取的值是0到11
    var month = myDate.getMonth();
//    2.3獲取日期,0代表周末,其他均正常
    var day = myDate.getDate();
//    2.4獲取星期
    var weekDay = myDate.getDay();
//    2.5獲取每小時
    var hour = myDate.getHours();
//    2.6獲取每分鐘
    var min = myDate.getMinutes();
//    2.7獲取每秒
    var second = myDate.getSeconds();
//    2.8獲取毫秒
    var mins = myDate.getMilliseconds();

3.js三部分###

1.ECMA規范
2.DOM(文檔對象模型)
3.BOM(瀏覽器對象模型)

border邊框none與0###

界面上所有內容都是渲染出來的,當邊框設置為none時不會渲染,為0時會渲染

this###

一般放在事件指令中,表示誰觸發了這個事件,一般是事件源

事件域###

當一個動態節點添加以后,動態節點所在的{}內就是他的事件域

for循環中的i++與++i###

for(初始值;終止值;變化){
    //循環執行代碼
}
  • 第一次循環中i++與++i沒區別
  • 所有語言在運行中最終都會轉為機器語言(匯編語言),i++會在機器語言中創建一個中間變量,++i不會,所以++i性能高于i++
  • 人們一直都在用i++,當發現++i性能略高于i++時,已經養成了習慣。所以總是使用i++

九宮格算法(掌握)###

  • 行號和列號的計算
  • 動態創建節點應用

下面是動態創建九宮格的代碼

CSS代碼:

        #box{
            position: relative;
        }
        /* 為了避免以后獲取同樣的標簽的時候寫很多對應的屬性的設置,
        我們最好把這些屬性設置抽取成一個類用來表示這些屬性*/
        .newBox{
            width: 100px;
            height: 100px;
            position: absolute;
            background: yellow;
            border-radius: 10px;
            display: inline-block;
        }

HTML代碼:

<button>添加</button>
<button>刪除</button>
<div id="box">

</div>

JS代碼:


    //1.獲取按鈕與父節點
    var btn = document.getElementsByTagName("button");
    var box = document.getElementById("box");
    //2.操控按鈕
    //2.1 創建一個值用來記錄索引,也可以叫做記錄盒子的個數
    var index = 0;
    btn[0].onclick = function () {
        index++;
        //2.1創建盒子
        var div = document.createElement("div");
        //2.2設置屬性 — 通過類名
        div.className = "newBox";
        div.innerHTML = index;

        //2.3 設置盒子的位置
        //2.3.1 確定行號和列號
        var col = (index-1)%3;
        console.log(col);
        var row = parseInt((index-1)/3);
        div.style.left = col * (100+10)+"px";
        div.style.top = row * (100+10)+"px";

        console.log(div);

        //2.4添加節點
        box.appendChild(div);
    }

    //3. 刪除盒子
    btn[1].onclick= function () {
        if(box.children.length-1<0)return;
        //3.1刪除節點
        box.removeChild(box.children[index-1]);
        //3.2 為了讓每次點擊都可以刪除最后一個節點,我們讓索引自減
        index--;
    };

發布微博###

創建ul時,在點擊事件外面創建

  • 點擊按鈕(插入)
    1.判斷輸入框中內容是否為空,是的話提示為空,否則再添加li節點
    2.添加節點的時候,需要判斷ul中是否有節點,沒有的話直接添加,有的話插入到第一個前面
  • 點擊按鈕(刪除)
    1.刪除li,獲取a標簽,并對a標簽數組進行遍歷,分別添加點擊事件。當點擊時則刪除對應的li

下面是代碼

CSS代碼:


        *{
            margin: 0;
            padding: 0;
        }
        #box{
            border: 1px solid #000;
            padding: 10px;
            width: 600px;
            height: 600px;
            margin: 100px auto;
            text-align: center;
        }
        #txta{
            width: 490px;
            height: 200px;
            resize: none;
            border: 1px solid #000;
        }
        #box ul{
            width: 460px;
            margin: 0 auto;
        }
        #box ul li{
            list-style:none;
            border-bottom: 1px dashed black;
            height: 30px;
            line-height:30px;
            text-align: left;
        }
        #box ul li a {
            float: right;
            cursor: pointer;
        }

HTML代碼:

<div id="box">
    發布微博
    <textarea name="" id="txta" cols="30" rows="10"></textarea>
    <button>發布</button>
</div>

JS代碼:


    //獲取標簽
    var parentBox = document.getElementById("box");
    var textArea = document.getElementById("txta");
    var btn = document.getElementsByTagName("button")[0];

    //創建ul標簽
    var myUl = document.createElement("ul");
    parentBox.appendChild(myUl);

    //點擊發布按鈕響應事件
    btn.onclick = function () {
        //獲取要發布的內容
        var content = textArea.value;

        //如果要發布的內容為空,則返回
        if(content==""){
            alert("請輸入要發布的內容");
            return;
        }else{
            //如果發布的內容有值,那么就創建新節點
            var li = document.createElement("li");
            //給新節點添加屬性與內部內容
            li.innerHTML = content + "<a>刪除</a>";
            //判斷新創建節點是否為第一條,如果是,直接添加。如果不是,則插入到首行
            if(myUl.children.length==0){
                myUl.appendChild(li);
            }else{
                myUl.insertBefore(li,myUl.children[0]);
            }

        }

        //刪除記錄操作,一定寫在點擊事件里面,因為a標簽需要動態獲取,如果在事件外,那么就只能獲取一次。但是a標簽是可以多次添加,會導致無法刪除
        var as = document.getElementsByTagName("a");
        for(let i = 0; i < as.length; ++i){
            as[i].onclick= function () {
                //點擊刪除按鈕后,從ul上刪除對應的li,相當于刪除a標簽的父節點
                myUl.removeChild(this.parentNode);
            }
        }

        textArea.value="";
    };

通過類名獲取標簽###

通過自定義封裝一個工具類函數來獲取標簽,了解即可,需要用的時候會寫

下面是自己練習的一個封裝方法
HTML代碼:

<div id="box">
    <button class="btn">btn按鈕</button>
    <button class="btn">btn按鈕</button>
    <button class="btn">btn按鈕</button>
    <button class="btn submit">btn按鈕</button>
    <button>按鈕</button>
</div>

JS代碼:


    var box = document.getElementById("box");
    function getSymByClassName(dom,className){
        if(dom.getElementsByClassName){
            return dom.getElementsByClassName(className);
        }
        var symArr = dom.getElementsByTagName("*");
        var arr = [];
        for(var i = 0; i<symArr.length; i++){
            var symClassNameArr = symArr[i].className.split(" ");
            for(var j = 0; j < symClassNameArr.length; j++){
                if(symClassNameArr[j] == className)
                    arr.push(symArr[i]);
            }
        }
        return arr;
    }
    var rst = getSymByClassName(box,"btn");
    for(var i = 0; i < rst.length; i++){
        rst[i].style.backgroundColor = "green";
    }

封裝一個直接獲取ID標簽的方法:

function $(tag){
  return document.getElementById(tag);
}

transform###

基于默認值進行變化
rotateX(angle) 定義沿著 X 軸的 3D 旋轉。
rotateY(angle) 定義沿著 Y 軸的 3D 旋轉。
rotateZ(angle) 定義沿著 Z 軸的 3D 旋轉。

寫了個鐘表的實現

CSS代碼:


        *{
            margin: 0;
            padding: 0;
            border: none;
        }
        .clock{
            width: 600px;
            height: 600px;
            margin: 100px auto;
            position: relative;
            background: url("images/clockImages/clock.jpg") no-repeat;
        }
        .hour,.minute,.second{
            width: 600px;
            height: 600px;
            position: absolute;
        }
        .hour{
            background: url("images/clockImages/hour.png") no-repeat center;
        }
        .minute{
            background: url("images/clockImages/minute.png") no-repeat center;
        }
        .second{
            background: url("images/clockImages/second.png") no-repeat center;
        }

HTML代碼:

<div id="clock" class="clock">
    <div class="hour"></div>
    <div class="minute"></div>
    <div class="second"></div>
</div>

JS代碼:


    /* 1.獲取標簽 */
    var h = document.getElementsByClassName("hour")[0];
    var m = document.getElementsByClassName("minute")[0];
    var s = document.getElementsByClassName("second")[0];
    /* 2.操控標簽,標簽旋轉 */
    /* 為了每時每刻都獲取對應時間,我們需要使用定時器 */

    /* 創建時間對象 */
    var timer = setInterval(function () {
        var myDate = new Date();
        /* 2.1 獲取毫秒 */
        var minS = myDate.getMinutes();
        /* 每秒旋轉6* */
        var sec = myDate.getSeconds()+minS/1000;
        console.log(sec);
        /* 每分旋轉6* */
        var min = myDate.getMinutes()+sec/60;
        /* 每小時旋轉30* */
        var hour = myDate.getHours()%12+min/60;
        /* 2.2設置旋轉 */
        h.style.webkitTransform = "rotate("+ hour * 30 +"deg)";
        m.style.webkitTransform = "rotate("+ min * 6 +"deg)";
        s.style.webkitTransform = "rotate("+ sec * 6 +"deg)";
    },100);

HTTP/HTTPS###

  • 客戶端從服務器拿數據發請求

  • http就是用來規定客戶端和服務器之間的傳輸協議

  • 客戶端發請求:HTTP請求(共有八種,常見的請求:GET、POST)
    1.post請求安全性高于get請求
    2.https:基于http通信協議中增加了一層SSL,更加安全
    3.對傳出的數據進行了加密,即使數據被另有所圖的人截取,解密也不會那么容易。

線程###

  • 多線程
    會提升性能,但是會降低安全性
    比如手機app發送請求會調用hub,但是同時還可以進行其他操作
  • 性能和安全性,只能取其一或者中和
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • 第1章 認識JS JavaScript能做什么?1.增強頁面動態效果(如:下拉菜單、圖片輪播、信息滾動等)2.實現...
    mo默22閱讀 1,319評論 0 5
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,829評論 18 139
  • 課程結束后的幾天,一直沒有力氣,不想說話,也不愿意出門和人打交道!看到老公兒子也是冷漠的態度!和以往打了雞血似的熱...
    竺子閱讀 308評論 0 0
  • 壹 一道炫目的光凌厲的劃破黑暗。 沈子琛下意識的抬起手臂擋在眼前,太陽暖烘烘的烤著他的皮膚。他扭一扭酸痛的身體,像...
    霧鎖千燈閱讀 363評論 2 1
  • 關于作者 芭芭拉·明托,畢業于哈佛大學,是麥肯錫咨詢公司第一位女咨詢顧問。她在寫作方面的優勢得到了麥肯錫高層的賞識...
    火星PArty閱讀 1,135評論 0 1