DOM應(yīng)用

DOM簡介:

   //DOM - document object model 文檔對象模型
    //其實dom的作用就是給了我們一些屬性和方法,讓我們可以操作頁面中的標簽
    
    //頁面元素 : 標簽
    

獲取元素的第一種方式:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>今天天氣不錯</title>
  <script>
    //書寫方式与境,駝峰命名法
    //傳入一個字符串類型的id名即可
    //console.log(document.getElementById("box"));
    //發(fā)現(xiàn)獲取結(jié)果為null值桩,說明沒有獲取到對應(yīng)的元素
    
    //入口函數(shù):
    window.onload = function () {
      //作用:內(nèi)部書寫的所有代碼苔咪,會在頁面完全加載(結(jié)構(gòu),圖片)后執(zhí)行河胎。
      console.log("這是入口函數(shù)中獲取的標簽");
      console.log(document.getElementById("box"));
    };
  </script>
</head>
<body>
<div id="box"></div>

<script>
  // 標簽的獲取方式:
  // 方式1:可以將js代碼書寫在body的最底部,可以保證所有的標簽先進行加載。
  console.log(document.getElementById("box"));
  
  // 方式2:可以使用入口函數(shù)的形式(見head中的代碼)

</script>
</body>
</html>

樣式操作:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>今天天氣不錯</title>
</head>
<body>

<div id="box"></div>

<script>
  //1 獲取元素
  var box = document.getElementById("box");
  
  //2 樣式操作
  //通過js設(shè)置的樣式推掸,在標簽的行內(nèi)生效
  
  //第一步需要先用標簽.style,可以獲取到這個標簽的所有樣式
  //console.log(box.style);
  //第二步是用標簽.style.具體的樣式名
  //設(shè)置的樣式值為字符串類型驻仅,如果有單位谅畅,加單位
  box.style.width = "100px";
  box.style.height = "100px";
  //在css中加-的樣式名,在js中使用時去除-噪服,并且后面的首字母大寫(駝峰命名法)
  //z-index  zIndex     font-size  fontSize
  box.style.backgroundColor = "red";


</script>
</body>
</html>

文本操作:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>今天天氣不錯</title>
</head>
<body>

<div id="box">
  我是內(nèi)容
  <p>我是p標簽</p>
</div>
<script>
  var box = document.getElementById("box");
  //1 標簽設(shè)置文本使用innerHTML屬性
  //1.1 設(shè)置純文本
  //box.innerHTML = "我是box的內(nèi)容";
  //1.2 設(shè)置文本和標簽
  //如果在設(shè)置的內(nèi)容中含有標簽的形式毡泻,innerHTML屬性執(zhí)行時會進行標簽的生成
  box.innerHTML = "我是內(nèi)容<p>我是子標簽p</p>";
  
  //2 獲取內(nèi)容
  console.log(box.innerHTML);
  
  //覆蓋的問題:
  //當(dāng)我們使用innerHTML屬性進行內(nèi)容設(shè)置時,會對原內(nèi)容進行覆蓋
  //box.innerHTML = "我是新的內(nèi)容";
  
  //解決的方式:
  //可以使用innerHTML+=的方式防止覆蓋
  //box.innerHTML = box.innerHTML + "我是新的內(nèi)容";
  box.innerHTML += "我是新的內(nèi)容";//簡化后
  //新的問題:雖然新舊內(nèi)容同時存在粘优,但是實際上內(nèi)部的子標簽新舊是不同的(重新生成仇味,長得一樣)呻顽。
</script>
</body>
</html>

getElementsByTagName的基本使用:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>今天天氣不錯</title>
</head>
<body>

<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>

<script>
  //注意:我們在DOM中獲取的所有數(shù)組形式的數(shù)據(jù),均為偽數(shù)組形式
  
  //元素的獲取方式2:根據(jù)標簽名獲取元素(可以同時操作多個標簽)
  // 基本語法: document.getElementsByTagName("標簽名");
  //var divs = document.getElementsByTagName("div");
  //console.log(divs);
  //我們發(fā)現(xiàn)丹墨,獲取的結(jié)果調(diào)用數(shù)組方法報錯廊遍,說明不支持數(shù)組方法,是偽數(shù)組贩挣。
arr= [1,2,4,5]
  arr.push();

  /*//需求:給每個div設(shè)置樣式
  //1 遍歷divs
  for (var i = 0; i < divs.length; i++) {
    //2 取出偽數(shù)組divs中的每個標簽后才能進行樣式操作
    divs[i].style.width = "100px";
    divs[i].style.height = "100px";
    divs[i].style.backgroundColor = "red";
    divs[i].style.marginBottom = "10px";
  }*/


</script>
</body>
</html>

在某個標簽內(nèi)部根據(jù)標簽名獲取元素:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>今天天氣不錯</title>
</head>
<body>

<div id="box">
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</div>

<div></div>
<div></div>
<div></div>
<div></div>
<div></div>

<script>
  //getElementsByTagName前面的元素是可以更改的
  //如果使用 標簽.getElementsByTagName() 表示在這個標簽內(nèi)部根據(jù)標簽名獲取元素
  var box = document.getElementById("box");
  var divs = box.getElementsByTagName("div");//只獲取到了box內(nèi)部的div
  
  //console.log(divs);
  for (var i = 0; i < divs.length; i++) {
    divs[i].style.width = "100px";
    divs[i].style.height = "100px";
    divs[i].style.backgroundColor = "red";
    divs[i].style.marginBottom = "10px";
  }


</script>
</body>
</html>

其他需要注意的問題:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>今天天氣不錯</title>
</head>
<body>

<div id="box"></div>


<p></p>

<script>
  //1 根據(jù)id名,由于id名具有唯一性喉前,獲取的時候getElementById的前面的元素不能修改
  // document.getElementById()
  
  //2 由于id名的唯一性,所以瀏覽器允許不獲取直接使用
  // 不是規(guī)范寫法揽惹,不推薦使用
  //console.log(box);
  
  //3 我們也可以使用標簽名的獲取元素獲取單一的一個元素
  //var text = document.getElementsByTagName("p");
  //console.log(text);
  ////注意被饿,盡管獲取的標簽只有一個,結(jié)果依然是偽數(shù)組搪搏,需要取出內(nèi)部的標簽后再進行操作狭握。
  ////text.style.width = "100px";
  //text[0].style.width = "100px";

  //簡化方式:
  var text = document.getElementsByTagName("p")[0];


</script>

</body>
</html>

隔行變色:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>今天天氣不錯</title>
</head>
<body>
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

<script>
  //1 獲取元素
  var lis = document.getElementsByTagName("li");
  
  //2 遍歷取出所有l(wèi)i
  for (var i = 0; i < lis.length; i++) {
    //lis[i] 是每個li
    //3 需要根據(jù)奇偶不同,設(shè)置不同背景色
    if (i % 2 == 0) {
      //i為偶數(shù)疯溺,lis[i]是奇數(shù)行
      lis[i].style.backgroundColor = "red";
    } else {
      //i為奇數(shù)论颅,lis[i]是偶數(shù)行
      lis[i].style.backgroundColor = "blue";
    }
  }


</script>
</body>
</html>

效果展示

隔行變色.png

常用功能的封裝

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>今天天氣不錯</title>
</head>
<body>

<div id="box"></div>
<script>
  //為什么要封裝函數(shù)功能?
  //1 方便代碼的使用(寫起來更方便)
  //2 增加代碼的可讀性
  
  //根據(jù)id名獲取元素的封裝:
  var box = id("box");
  
  /**
   * 根據(jù)id名獲取元素
   * @param idName 傳入字符串的id名
   * @returns {Element} 返回獲取到的標簽
   */
  function id(idName) {
    return document.getElementById(idName);
  }
  
  //樣式設(shè)置操作的基本封裝:
  //box.style.width = "100px";//原生的書寫方式
  //    setCss(box, "width", "100px");//我們期望的使用方式
  //    setCss(box, "height", "100px");
  //    setCss(box, "backgroundColor", "red");
  
  function setCss(tag, styleName, styleValue) {
    //注意,styleName的值是用戶傳入的字符串囱嫩,所以使用的時候需要使用[]的屬性訪問方式
    tag.style[styleName] = styleValue;
  }
  
  
  //同樣的功能恃疯,在使用時需要多次調(diào)用,對性能的消耗較大
  //所以需要對setCss功能進行修改墨闲,使這個函數(shù)可以一次進行多個樣式的設(shè)置
  //setCss(box, "width", "100px", "height", "100px");
  //我們發(fā)現(xiàn)今妄,傳入多個需要修改的樣式時,參數(shù)個數(shù)不定鸳碧,使用時不太方便
  //可以采用對象的傳入方式
  
  setCss(box, {
    width: "150px",
    height: "150px",
    backgroundColor: "red"
  });
  
  function setCss(tag, obj) {
    //需要將用戶設(shè)置的每一組數(shù)據(jù)取出盾鳞,依次進行樣式設(shè)置操作即可
    for (var k in obj) {
      //k - 屬性名 - 字符串類型 - 也就是需要設(shè)置的樣式名
      //obj[k] - 屬性值 - 代表了要設(shè)置的樣式值
      tag.style[k] = obj[k];
    }
  }
  
  //關(guān)于返回值問題的說明:
  //1 所有的設(shè)置操作不需要返回值。
  //2 所有的獲取操作均需要返回值瞻离。


</script>
</body>
</html>

事件

<script>
//事件:用于捕捉用戶操作的一種方式
//事件的三個組成部分:
//1 觸發(fā)事件的東西
//2 如何觸發(fā)的
//3 觸發(fā)后什么結(jié)果
//車撞樹的這個例子中腾仅,車是觸發(fā)事件的東西,觸發(fā)方式是撞套利,結(jié)果(樹倒了推励,車壞了,人被砸了肉迫,但是沒事)
//事件三要素:
//1 事件源(被動觸發(fā)的)
//2 事件類型(點擊验辞,移入。昂拂。受神。)
//3 事件處理程序:類型為函數(shù)(只有函數(shù)才可以保存一部分代碼)
//語法:
//事件源.事件類型 = function () {
//事件處理程序
//}
</script>

點擊事件效果

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>今天天氣不錯</title>
</head>
<body>
<button id="btn">按鈕</button>

<script>
  //點擊按鈕,彈出一個提示框格侯,提示今天天氣不錯
  
  //事件源 - 按鈕
  //事件類型 - 點擊 - onclick
  //事件處理程序 - 彈出一個提示框鼻听,提示今天天氣不錯
  
  var btn = document.getElementById("btn");
  //事件源.事件類型 = function () {
  //事件處理程序
  //}
  btn.onclick = function () {
    alert("今天天氣不錯");
  };


</script>
</body>
</html>

標簽行內(nèi)屬性操作

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>今天天氣不錯</title>
</head>
<body>

<div id="box" title="呵呵"></div>

<script>
  //標簽行內(nèi)自帶的屬性
  //可以通過 標簽.屬性名 的方式進行訪問
  var box = document.getElementById("box");
  //獲取操作:
  console.log(box.id);
  //設(shè)置操作:
  box.id = "box3";
  console.log(box.title) // 呵呵

</script>

</body>
</html>

圖片切換

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>今天天氣不錯</title>
</head>
<body>
<button id="btn1">切換為圖片2</button>
<button id="btn2">切換為圖片1</button>
![](images/111.jpg)

<script>
  //1 獲取元素
  var btn1 = document.getElementById("btn1");
  var btn2 = document.getElementById("btn2");
  var pic = document.getElementById("pic");
  
  //2 按鈕1 點擊后切換圖片為222.jpg
  btn1.onclick = function () {
    pic.src = "images/222.jpg";
  };
  
  //3 按鈕2 點擊后切換為111.jpg
  btn2.onclick = function () {
    pic.src = "images/111.jpg";
  };


</script>
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市联四,隨后出現(xiàn)的幾起案子撑碴,更是在濱河造成了極大的恐慌,老刑警劉巖朝墩,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件醉拓,死亡現(xiàn)場離奇詭異,居然都是意外死亡收苏,警方通過查閱死者的電腦和手機亿卤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹿霸,“玉大人排吴,你說我怎么就攤上這事∨呈螅” “怎么了钻哩?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肛冶。 經(jīng)常有香客問我街氢,道長,這世上最難降的妖魔是什么睦袖? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任珊肃,我火速辦了婚禮,結(jié)果婚禮上馅笙,老公的妹妹穿的比我還像新娘伦乔。我一直安慰自己,他們只是感情好延蟹,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布评矩。 她就那樣靜靜地躺著,像睡著了一般阱飘。 火紅的嫁衣襯著肌膚如雪斥杜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天沥匈,我揣著相機與錄音蔗喂,去河邊找鬼。 笑死高帖,一個胖子當(dāng)著我的面吹牛缰儿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播散址,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼乖阵,長吁一口氣:“原來是場噩夢啊……” “哼宣赔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞪浸,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤儒将,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后对蒲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钩蚊,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年蹈矮,在試婚紗的時候發(fā)現(xiàn)自己被綠了砰逻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡泛鸟,死狀恐怖蝠咆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谈况,我是刑警寧澤勺美,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站碑韵,受9級特大地震影響赡茸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祝闻,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一占卧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧联喘,春花似錦华蜒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蓖谢,卻和暖如春捂蕴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闪幽。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工啥辨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盯腌。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓溉知,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子级乍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

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

  • 1.DOM基礎(chǔ) 什么是DOM :document ,節(jié)點! 其實說的都是一個東西, CSS時管叫標簽, JS時管叫...
    壹點微塵閱讀 428評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理舌劳,服務(wù)發(fā)現(xiàn),斷路器卡者,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 組件架構(gòu):hiveserver2(beeline),hive,metadb Execution Engine – ...
    satyrs_sh閱讀 118評論 0 0
  • 下文是全文引自吳國盛老師的博客蒿囤,絕非剽竊客们,只是為了其他文章引用方便崇决,原文地址鏈接如下。 正文 中文“科學(xué)”一詞是對...
    童年的流星閱讀 2,323評論 2 6
  • 這日小喬在押鏢的時候,被傲視幫會的人追殺建邓,那狗腿子鐵血太監(jiān)追了小喬十八條街盈厘!他逗弄著小喬,每次劍尖在她身側(cè)插過官边,小...
    歲月靜好215閱讀 266評論 0 0