初見JavaScript

初識JavaScript

  • JavaScript 一種腳本語言,是一種動態類型、弱類型(弱類型可以自動轉換,不需要手工。動態類型python可以做任何類型的變量)
  • JavaScript通常用來操作HTML頁面的
  • html骨架(頁面結構),css是樣式(元素大小、顏色、位置、隱藏或顯示等),js是行為(部分動畫效果、頁面與用戶交互等)

js代碼位置

JavaScript代碼可以寫在頁面的script標簽里面,或者單獨的js文件里面,或者標簽屬性里面(不推薦)

  • 寫在頁面的script標簽里面
<script>
        alert(2);//彈窗  用來調試代碼
        console.log(888);//打印到控制臺 用來調試代碼
</script>
  • 寫在外部.js后綴文件里面,通過script標簽引入
<script src="5-js02.js">/*引入外部js文件*/</script>
# 注意:在引入js文件的script標簽里面,一定不能再寫js代碼

#外部js文件5-js02.js
alert("我是外部6-js02.js文件");

script標簽的位置:

  • 一般script標簽會被放在頭部或尾部。頭部就是<head>里面,尾部一般指<body>里。不同位置要注意加載順序,如果沒有什么特殊要求,通常放在body 結束之前。
  • 如果script里面涉及到操作后面的元素,而script又非得放在前面的話,需要加上window.onload(一個頁面中只能出現一次window.onload)
<head>
    <meta charset="UTF-8">
    <title>初識JavaScript</title>
    <script>
        alert("script寫在head里面");
        //如果script里面涉及到操作后面的元素,而又非得把script放在前面的話,需要加上window.onload:
        window.onload = function(){
            alert("我是加上window.onload里面的"); //這里再寫代碼(意思是:當整個頁面加載完成之后,再執行這里的代碼)
        }//一個頁面中只能出現一次window.onload
    </script>
</head>

html文件是自上而下的執行方式,但引入的css和javascript的順序有所不同,css引入執行加載時,程序仍然往下執行,而執行到<script>腳本是則中斷線程,待該script腳本執行結束之后程序才繼續往下執行。所以,一般將script放在body之后是因為避免長時間執行script腳本而延遲阻塞。而有一些頁面的效果的實現,是需要預先動態的加載一些js腳本,所以這些腳本應該放在<body>之前。其次,不能將需要訪問dom元素的js放在body之前,因為此時還沒有開始生成dom,所以在body之前的訪問dom元素的js會出錯,或者無效。就是因為這個,在dom沒生成好時我就給它添加了方法,才導致這樣。

寫js代碼需要注意什么?

  • 注釋里面是沒有要求的
  • 嚴格區分大小寫
  • 語句字符都是半角字符(字符串里面可以使用任意字符)
  • 某些完整語句后面要寫分號
  • 代碼要縮進,縮進要對齊
  • 引號里面代表字符串,字符串是沒有代碼的功能的,所以不需要滿足上述要求。

注釋

  • 多行注釋 /* */
  • 單行注釋 //

js里的系統彈窗代碼

alert("內容");

js里的打印

console.log(1);

js獲取元素及修改內容

其實,要操作頁面,就是操作標簽,JS要操作標簽,就要先獲取標簽

獨有標簽的獲取:
document.title   document.title
document.body    document.body.innerHTML(會解析標簽) 
                 document.body.innerText(不會會解析標簽) 
document.head    document.head.innerHTML 
其他標簽的獲取
  • 通過id獲取元素,document.getElementById("box");
        //獲取的是確切的某個元素,可以直接操作這個元素
        var oBox = document.getElementById('box');
        console.log(oBox)
        oBox.innerHTML +="我是通過id獲取來改變的"
  • 通過class獲取getElementsByClassName()(不兼容IE8及以下)
#獲取的是一堆元素的集合,設置操作的時候要通過下標(索引、序號)拿到對應的某一個
        var oBox = document.getElementsByClassName("box");
        console.log(oBox);
        console.log(oBox.length);//長度
        oBox[0].innerHTML += "我是通過ClassName獲取來改變的"; //即便長度為1也要用索引
  • 通過標簽名獲取,getElementsByTagName()
      var oP = document.getElementsByTagName("p");
        console.log(oP.length);
        oP[1].innerHTML += "我我我";
  • 通過選擇器的寫法獲取元素:(不兼容IE7及以下)
    .querySelector();
    .querySelectorAll();
    querySelector() 方法僅僅返回匹配指定選擇器的第一個元素。如果你需要返回所有的元素,請使用 querySelectorAll() 方法替代。
         //獲取第一個對應的元素
        var oI = document.querySelector("#box1");
        oI.innerHTML +="ahhh"; //獲取是第一個元素,只是一個而已,不需要用索引引用
        var oI2 = document.querySelectorAll("#box1");
        console.log(oI2.length); //2;
        oI2[1].innerHTML +="哈哈";
  • 通過name獲取
.getElementsByName();     #可返回帶有指定名稱的對象的集合。

注意: 除了ID獲取前面必須是document之外,其他的方式,前面可以是某個元素,但不能是集合。

    <script>
        //注意: 除了ID獲取前面必須是document之外,其他的方式,前面可以是某個元素(不能是集合)
        var oP = document.getElementsByTagName("p");
        console.log(oP);
        var oBox = document.getElementById("box");
        console.log(oBox);
        var oP1 = oBox.getElementsByTagName("p");//獲取box下的元素
        console.log(oP1);
    </script>
元素內容修改
  • 修改頁面title信息
document.title = "我要把標題改成666";
  • 修改別的標簽的內容,得用innerHTML或者innerText
innerHTML    可以識別標簽
innerText    不能識別標簽
  • 獲取某個確切的元素,可以直接操作這個元素
document.getElementById("box").innerHTML = "吃驚!";
  • 獲取的是一堆元素的集合,設置操作時要通過下標(索引、序號)拿到對應的某一個再用
document.getElementsByClassName("box")[0].innerHTML = "美女";
  • 對于form元素獲取值
var text = document.getElementsByTagName("textarea");
console.log(text.value);
  • document.write()
    在文檔流關閉之前,給body部分新增內容,在文檔流關閉之后,修改整個HTML的內容。
<script>
     /*
        document.write()
            在文檔流關閉之前,給body部分新增內容
            在文檔流關閉之后,修改整個html的內容
     */
        document.write("<em>在文檔流關閉之前,給body部分新增內容</em>");
        window.onload = function () {
                document.write("<em>在文檔流關閉之后,修改整個html的內容</em>"); //文檔流關閉可以理解為body結束
            }

</script>

事件

  • 用戶的操作 元素.事件 = 函數;
  • 鼠標事件
    onclick 左鍵單擊
    ondblclick 左鍵雙擊
    onmouseenter 鼠標移入
    onmouseleave 鼠標移出
<body>
    <div>hahah</div>
    <script>
        /*
       所謂事件,是指 JavaScript 捕獲到用戶的操作,并做出正確的響應。
       在事件函數里面,有一個關鍵字this,代表當前觸發事件的這個元素
       事件:用戶的操作
       元素.事件 = 函數;
       鼠標事件:
           左鍵單擊 onclick
           左鍵雙擊 ondblclick
           鼠標移入 onmouseover/  onmouseenter ***
           鼠標移出 onmouseout/  onmouseleave ***
        */
        var oBox = document.getElementsByTagName("div");
        oBox[0].onclick = function () {
            console.log("我被點擊了");
            this.innerHTML = "我被點擊了";
        };
        oBox[0].onmouseenter = function(){
            console.log("我被移入了");
            this.innerHTML = "我被移入了";
        };
        oBox[0].onmouseleave = function() {
            console.log("我被移出了");
            this.innerHTML = "我被移出了";
        };
    </script>
</body>

js操作元素的標簽屬性

  • 規范的標簽屬性:
    . 符號直接操作(可讀可寫)
  • 不規范(自定義)的標簽屬性:
    • 獲取 getAttribute
    • 設置 setAttribute
    • 移除 removeAttribute
<body>
    <a href="5-js事件05.html" id="box" class="box" target="_blank" tz="llp182">百度下</a>
    <script>
        /*
        js操作元素的標簽屬性:
            規范的標簽屬性:
                . 符號直接操作(可讀可寫)
            不規范(自定義)的標簽屬性:
                獲取:.getAttribute
                設置:.setAttribute
                移除:.removeAttribute

          注意:
          所有的 路徑、顏色 獲取的結果不一定是你寫的內容
          通過id獲取的元素賦值給變量后,假設修改了id,這個變量還是表示這個元素
          自定義標簽屬性的操作方式,同樣可以操作符合規范的標簽屬性
         */
        var oA = document.getElementById("box");
        // alert(oA.id); //可讀
        // alert(oA.target);
        // alert(oA.className); //class屬性  要用className
        // alert(oA.tz); //undefined 自定義標簽直接.獲取不到
        oA.id = "wrap";
        oA.target = "_self"; //可寫
        oA.className = "";
        alert(oA.getAttribute("id"));
        alert(oA.getAttribute("tz"));
        oA.setAttribute("tz","py");
        oA.setAttribute("web","pc");
        oA.removeAttribute("target"); //自定義標簽屬性的操作方式,同樣可以操作符合規范的標簽屬性
        oA.removeAttribute("class");
        alert(oA.href);

        /*添加,刪除類名,也可一次性添加多個*/
        sliderLi[index].classList.add("show"); 
        sliderLi[index].classList.add("show","show1","show2"); 

        cycleLi[index].classList.remove("on"); 
        cycleLi[index].classList.remove("on","on1","on2"); 
    </script>
</body>

注意:所有的 路徑/顏色 獲取的結果不一定就是你寫的內容
通過ID獲取的元素賦值給變量后,假設修改了ID,這個變量還是表示這個元素
自定義標簽屬性的操作方式,同樣可以操作符合規范的標簽屬性

控制元素的樣式

  • 行內樣式標簽屬性:大部分情況下,js都是通過操作行內樣式達到修改樣式的目的, 當我需要單個屬性去修改的時候,我們一般都是直接 . 操作去修改元素的行內樣式
  • 操作復合屬性時,要注意用駝峰寫法(去掉-號,-號后面的第一個單詞大寫)
<body>
    <div id="box" class="box"></div>
    <script>
        //行內樣式標簽屬性:大部分情況下,js都是通過行內樣式來達到修改樣式的目的
        // <div id="box" class="box" style="width: 100px;height: 100px;background: red;"> 類似用js操作這種形式;
        //當我們需要修改單個屬性的時候,我們一般都是直接.操作去修改元素的行內樣式
        var oBox = document.getElementById("box")
        // oBox.style.width = "300px";
        // oBox.style.height = "300px"
        // oBox.style.background = "red";
        //樣式一多,代碼就很多;而且通過JS來覆寫對象的樣式是比較典型的一種銷毀原樣式并重建的過程,這種銷毀和重建,都會增加瀏覽器的開銷。
        oBox.style.cssText = "width:200px;height:200px;background:red"; //cssText 的本質就是設置 HTML 元素的 style 屬性值。這樣會有一個問題,會把原有的cssText清掉,比如原來的style中有’display:none;’,那么執行完上面的JS后,display就被刪掉了。
        //可以利用累加,在前面添加一個分號(同樣屬性利用后來居上覆蓋)來解決這個問題
        oBox.style.cssText += ";width:200px;height:200px;background:red";
        // 操作復合屬性時,要注意用駝峰寫法(去掉-號,-號后面的第一個單詞大寫)
        oBox.style.marginLeft = "10px"; //margin-left
        oBox.style["margin-top"] = "50px";
    </script>
</body>

案例

  • 需求:
    ①打開時


    image.png

    ②點擊時


    image.png

    image.png
  • 代碼實現:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>作業6</title>
    <style>
        div{
            width: 200px;
            height: 50px;
            background: yellow;
            border-radius:20px 20px 20px 20px;/*左上角,右上角,右下角,左下角*/
            margin: 50px auto; /*上下50px 左右auto*/
            text-align: center; /*水平居中*/
            line-height: 50px; /*行高使字垂直居中*/
            font-size: 14px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id="div1"></div>
    <div id="div2"></div>
    <div id="div3"></div>
    <div id="div4"></div>
    <script>
        var oDiv = document.getElementsByTagName("div");
        oDiv[0].onclick = function(){
            this.innerHTML = "我被點擊了";
            this.style.color = "red";
            oDiv[1].innerHTML = "老大被點擊了";
            oDiv[1].style.color = "blue";
            oDiv[2].innerHTML = "老大被點擊了+1";
            oDiv[2].style.color = "blue";
        };
        oDiv[2].onclick = function(){
            this.innerHTML = "我被點擊了";
            this.style.color = "red";
            oDiv[0].innerHTML = "小弟被點擊了";
            oDiv[0].style.color = "blue";
            oDiv[1].innerHTML = "小弟被點擊了+1";
            oDiv[1].style.color = "blue";
            oDiv[3].innerHTML = "<a ;
        };
    </script>
</body>
</html>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,783評論 1 92
  • HTML標簽解釋大全 一、HTML標記 標簽:!DOCTYPE 說明:指定了 HTML 文檔遵循的文檔類型定義(D...
    米塔塔閱讀 3,301評論 1 41
  • HTML 5 HTML5概述 因特網上的信息是以網頁的形式展示給用戶的,因此網頁是網絡信息傳遞的載體。網頁文件是用...
    阿啊阿吖丁閱讀 4,026評論 0 0
  • 前端開發者丨http請求 https:www.rokub.com 前言見解有限, 如有描述不當之處, 請幫忙指出,...
    麋鹿_720a閱讀 10,964評論 11 31
  • 夜悄然而至 她像墜落的天使 開始她難眠之夜 若是換作從前 她不愛那嗆人的味道 不知從何時起 她開始迷戀那朦朧的煙 ...
    一直的思念閱讀 288評論 0 0