js的dom操作(整理)(轉)


js的dom操作整理(整理)(轉)

一、總結

一句話總結:

dom操作有用原生js的dom操作,也可以用對js封裝過的jquery等插件來來更加方便的進行dom操作

 

1、dom是什么?

對於JavaScript,為了能夠使JavaScript操作Html,JavaScript就有了一套自己的dom編程接口。
對於Html,dom使得html形成一棵dom樹,類似於一顆家族樹一樣,一層接一層,子子孫孫。

 

2、Html的DOM樹是什么?

HTML中的每個標簽元素,屬性,文本都能看做是一個DOM的節點,這些dom節點構成了一個樹形結構

 

3、原生的dom操作指的是什么?

就是用原生的js進行的操作,相對的就是非原生操作,比如用jquery操作dom

 

4、dom操作怎么學?

知道dom操作是用js操作dom樹的原理,並且知道幾個核心函數,要用的時候不熟悉的函數直接去查文檔

 

5、標簽之間,如果有文本,就是文本節點,如果沒有,就是空白節點?

<ul>1<li>2</li>3</ul> 1,2,3的位置都是這樣,1、3是兒子,2是孫子

 

6、如何給div元素添加一個文本節點'還我命來'為h3標簽?

var h3_1=document.createElement("h3");
var str1=document.createTextNode('還我命來');
div1.append(h3_1);
//1.現在的目標,給div增加一個h3,h3里面的文本內容是‘還我命來’,h3還有一個屬性是‘huai_ren’,值是‘fry’
function add_h3() {
    var div1=document.getElementById('div1');
    var h3_1=document.createElement("h3");
    var str1=document.createTextNode('還我命來');
    h3_1.append(str1);
    h3_1.setAttribute('huai_ren','fry');
    div1.append(h3_1);
}

 

 

 

二、DOM操作基礎介紹

轉自或參考:JavaScript--淺談DOM操作
https://www.cnblogs.com/Ry-yuan/p/6918155.html

 

1.理解DOM:

  DOM(Document Object Model ,文檔對象模型)一種獨立於語言,用於操作xml,html文檔的應用編程接口。

  怎么說,我從兩個角度理解:
  • 對於JavaScript,為了能夠使JavaScript操作Html,JavaScript就有了一套自己的dom編程接口。
  • 對於Html,dom使得html形成一棵dom樹,類似於一顆家族樹一樣,一層接一層,子子孫孫。
  所以說,有了DOM,在我看來就是相當於JavaScript拿到了鑰匙一樣可以去操作Html的每一個節點,觸摸Html每寸肌膚。(咳。。。)
 
2.介紹Html的DOM樹:
說明:html標簽通過瀏覽器的解析后才會形成dom樹,此后HTML中的每個標簽元素,屬性,文本都能看做是一個DOM的節點,JavaScript都能通過dom的提供的編程接口操作到每個節點,去了解瀏覽器的渲染機制能夠幫助我們了解dom。
Html代碼:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>dom</title>
</head>
<body>
    <div>
        <a href="www.baidu.com">百度</a>
    </div>
</body>
</html>

對應的DOM樹結構圖:

3.認識JavaScript中的DOM編程接口:
上面說了html形成的dom樹,接着說下通過js的dom編程接口去操作這棵dom樹。
JavaScriptDOM操作的常用方法和屬性::
  • 常用方法:
  1. 獲取節點:
    1. document.getElementById(idName)          //通過id號來獲取元素,返回一個元素對象
    2. document.getElementsByName(name)       //通過name屬性獲取id號,返回元素對象數組
    3. document.getElementsByClassName(className)   //通過class來獲取元素,返回元素對象數組(ie8以上才有)
    4. document.getElementsByTagName(tagName)       //通過標簽名獲取元素,返回元素對象數組
  2. 獲取/設置元素的屬性值:
    1. element.getAttribute(attributeName)     //括號傳入屬性名,返回對應屬性的屬性值
    2. element.setAttribute(attributeName,attributeValue)    //傳入屬性名及設置的值
  3. 創建節點Node:
    1. document.createElement("h3")       //創建一個html元素,這里以創建h3元素為例
    2. document.createTextNode(String); //創建一個文本節點;
    3. document.createAttribute("class"); //創建一個屬性節點,這里以創建class屬性為例
  4. 增添節點:
    1. element.appendChild(Node);   //往element內部最后面添加一個節點,參數是節點類型
    2. elelment.insertBefore(newNode,existingNode); //在element內部的中在existingNode前面插入newNode
  5. 刪除節點:
    1. element.removeChild(Node)    //刪除當前節點下指定的子節點,刪除成功返回該被刪除的節點,否則返回null
 
  • 常用屬性:
  1. 獲取當前元素的父節點 :
    1. element.parentNode     //返回當前元素的父節點對象
  2. 獲取當前元素的子節點:
    1. element.chlidren        //返回當前元素所有子元素節點對象,只返回HTML節點
    2. element.chilidNodes   //回當前元素多有子節點,包括文本,HTML,屬性節點。(回車也會當做一個節點)
    3. element.firstChild      //返回當前元素的第一個子節點對象
    4. element.lastChild       //返回當前元素的最后一個子節點對象
  3. 獲取當前元素的同級元素:
    1. element.nextSibling          //回當前元素的下一個同級元素 沒有就返回null
    2. element.previousSibling   //返回當前元素上一個同級元素 沒有就返回null
  4. 獲取當前元素的文本:
    1. element.innerHTML   //回元素的所有文本,包括html代碼
    2. element.innerText     //返回當前元素的自身及子代所有文本值,只是文本內容,不包括html代碼
  5. 獲取當前節點的節點類型:node.nodeType   //回節點的類型,數字形式(1-12)常見幾個1:元素節點,2:屬性節點,3:文本節點。
  6. 設置樣式:element.style.color=“#eea”;      //設置元素的樣式時使用style,這里以設置文字顏色為例。
4.總結:
大家都會覺得用jQuery來操作dom會更加的方便且好用,因為jq對js的dom進行了封裝,使得我們Write Less, Do More。但是我覺得還是要總結一下原生js的dom,從根本上了解js對dom的操作,只會有利而無害。
 
 
 

三、js操作dom的講解及實例

1.認識DOM

文檔對象模型DOM(Document Object Model)定義訪問和處理HTML文檔的標准方法。DOM 將HTML文檔呈現為帶有元素、屬性和文本的樹結構(節點樹)

先來看看下面代碼:

將HTML代碼分解為DOM節點層次圖:

HTML文檔可以說由節點構成的集合,DOM節點有:

1. 元素節點:上圖中<html>、<body>、<p>等都是元素節點,即標簽

2. 文本節點:向用戶展示的內容,如<li>...</li>中的JavaScript、DOM、CSS等文本。

3. 屬性節點:元素屬性,如<a>標簽的鏈接屬性href="http://www.imooc.com"

節點屬性:

遍歷節點樹:

以上圖ul為例,它的父級節點body,它的子節點3個li,它的兄弟結點h2、P。

DOM操作:

注意:前兩個是document方法

 

 

2.getElementsByName()方法

返回帶有指定名稱的節點對象的集合。

語法:

document.getElementsByName(name)

與getElementById() 方法不同的是,通過元素的 name 屬性查詢元素,而不是通過 id 屬性。

注意:

1. 因為文檔中的 name 屬性可能不唯一,所有 getElementsByName() 方法返回的是元素的數組,而不是一個元素。

2. 和數組類似也有length屬性,可以和訪問數組一樣的方法來訪問,從0開始。

看看下面的代碼:

運行結果:

 

 

3.getElementsByTagName()方法

返回帶有指定標簽名的節點對象的集合。返回元素的順序是它們在文檔中的順序。

語法:

document.getElementsByTagName(Tagname)

說明:

1. Tagname是標簽的名稱,如p、a、img等標簽名。

2. 和數組類似也有length屬性,可以和訪問數組一樣的方法來訪問,所以從0開始。

看看下面代碼,通過getElementsByTagName()獲取節點。

 

 

4.區別getElementByID,getElementsByName,getElementsByTagName

以人來舉例說明,人有能標識身份的身份證,有姓名,有類別(大人、小孩、老人)等。

1. ID 是一個人的身份證號碼,是唯一的。所以通過getElementById獲取的是指定的一個人。

2. Name 是他的名字,可以重復。所以通過getElementsByName獲取名字相同的人集合。

3. TagName可看似某類,getElementsByTagName獲取相同類的人集合。如獲取小孩這類人,getElementsByTagName("小孩")。

把上面的例子轉換到HTML中,如下:

<input type="checkbox" name="hobby" id="hobby1">  音樂

input標簽就像人的類別。

name屬性就像人的姓名。

id屬性就像人的身份證。

方法總結如下:

注意:方法區分大小寫

通過下面的例子(6個name="hobby"的復選項,兩個按鈕)來區分三種方法的不同:

  <input type="checkbox" name="hobby" id="hobby1">  音樂
  <input type="checkbox" name="hobby" id="hobby2">  登山
  <input type="checkbox" name="hobby" id="hobby3">  游泳
  <input type="checkbox" name="hobby" id="hobby4">  閱讀
  <input type="checkbox" name="hobby" id="hobby5">  打球
  <input type="checkbox" name="hobby" id="hobby6">  跑步 
  <input type="button" value = "全選" id="button1">
  <input type="button" value = "全不選" id="button1">

1. document.getElementsByTagName("input"),結果為獲取所有標簽為input的元素,共8個。

2. document.getElementsByName("hobby"),結果為獲取屬性name="hobby"的元素,共6個。

3. document.getElementById("hobby6"),結果為獲取屬性id="hobby6"的元素,只有一個,"跑步"這個復選項。

 

 

5.getAttribute()方法

通過元素節點屬性名稱獲取屬性的值

語法:

elementNode.getAttribute(name)

說明:

1. elementNode:使用getElementById()、getElementsByTagName()等方法,獲取到的元素節點。

2. name:要想查詢的元素節點的屬性名字

看看下面的代碼,獲取h1標簽的屬性值

運行結果:

h1標簽的ID :alink
h1標簽的title :getAttribute()獲取標簽的屬值

 

 

6.setAttribute()方法

setAttribute() 方法增加一個指定名稱和值的新屬性,或者把一個現有的屬性設定為指定的值。

語法:

elementNode.setAttribute(name,value)

說明:

1.name: 要設置的屬性名。

2.value: 要設置的屬性值。

注意:

1.把指定的屬性設置為指定的值。如果不存在具有指定名稱的屬性,該方法將創建一個新屬性。

2.類似於getAttribute()方法,setAttribute()方法只能通過元素節點對象調用的函數。

 

 

7.節點屬性

在文檔對象模型 (DOM) 中,每個節點都是一個對象。DOM 節點有三個重要的屬性 :

1. nodeName : 節點的名稱

2. nodeValue :節點的值

3. nodeType :節點的類型

一、nodeName 屬性: 節點的名稱,是只讀的

1. 元素節點的 nodeName 與標簽名相同
2. 屬性節點的 nodeName 是屬性的名稱
3. 文本節點的 nodeName 永遠是 #text
4. 文檔節點的 nodeName 永遠是 #document

二、nodeValue 屬性:節點的值

1. 元素節點的 nodeValue 是 undefined 或 null
2. 文本節點的 nodeValue 是文本自身
3. 屬性節點的 nodeValue 是屬性的值

三、nodeType 屬性: 節點的類型,是只讀的。以下常用的幾種結點類型:

元素類型    節點類型
  元素          1
  屬性          2
  文本          3
  注釋          8
  文檔          9

 

 

8.訪問子結點childNodes

訪問選定元素節點下的所有子節點的列表,返回的值可以看作是一個數組,他具有length屬性

語法:

elementNode.childNodes

注意:

如果選定的節點沒有子節點,則該屬性返回不包含節點的 NodeList。

我們來看看下面的代碼:

運行結果:

IE:

  UL子節點個數:3
  節點類型:1

其它瀏覽器:

   UL子節點個數:7
   節點類型:3

注意:

1. IE全系列、firefox、chrome、opera、safari兼容問題

2. 節點之間的空白符,在firefox、chrome、opera、safari瀏覽器是文本節點,所以IE是3,其它瀏覽器是7,如下圖所示:

如果把代碼改成這樣:

<ul><li>javascript</li><li>jQuery</li><li>PHP</li></ul>

運行結果:(IE和其它瀏覽器結果是一樣的)

  UL子節點個數:3
  節點類型:1

 

 

9.訪問子結點的第一和最后項

一、firstChild 屬性返回‘childNodes’數組的第一個子節點。如果選定的節點沒有子節點,則該屬性返回 NULL。

語法:

node.firstChild

說明:與elementNode.childNodes[0]是同樣的效果。 

二、 lastChild 屬性返回‘childNodes’數組的最后一個子節點。如果選定的節點沒有子節點,則該屬性返回 NULL。

語法:

node.lastChild

說明:與elementNode.childNodes[elementNode.childNodes.length-1]是同樣的效果。 

注意: 上一節中,我們知道Internet Explorer 會忽略節點之間生成的空白文本節點,而其它瀏覽器不會。我們可以通過檢測節點類型,過濾子節點。 (以后章節講解)

 

 

10.訪問父節點parentNode

獲取指定節點的父節點

語法:

elementNode.parentNode

注意:父節點只能有一個。

看看下面的例子,獲取 P 節點的父節點,代碼如下:

<div id="text">
  <p id="con"> parentNode 獲取指點節點的父節點</p>
</div> 
<script type="text/javascript">
  var mynode= document.getElementById("con");
  document.write(mynode.parentNode.nodeName);
</script>

運行結果:

parentNode 獲取指點節點的父節點
DIV

訪問祖節點:

elementNode.parentNode.parentNode

看看下面的代碼:

<div id="text">  
  <p>
    parentNode      
    <span id="con"> 獲取指點節點的父節點</span>
  </p>
</div> 
<script type="text/javascript">
  var mynode= document.getElementById("con");
  document.write(mynode.parentNode.parentNode.nodeName);
</script>

運行結果:

parentNode獲取指點節點的父節點
DIV

注意: 瀏覽器兼容問題,chrome、firefox等瀏覽器標簽之間的空白也算是一個文本節點。

 

 

11.訪問兄弟節點

1. nextSibling 屬性可返回某個節點之后緊跟的節點(處於同一樹層級中)。

語法:

nodeObject.nextSibling

說明:如果無此節點,則該屬性返回 null。

2. previousSibling 屬性可返回某個節點之前緊跟的節點(處於同一樹層級中)。

語法:

nodeObject.previousSibling  

說明:如果無此節點,則該屬性返回 null。

注意: 兩個屬性獲取的是節點。Internet Explorer 會忽略節點間生成的空白文本節點(例如,換行符號),而其它瀏覽器不會忽略。

解決問題方法:

判斷節點nodeType是否為1, 如是為元素節點,跳過。

運行結果:

LI = javascript
nextsibling: LI = jquery

 

 

12.插入節點appendChild()

在指定節點的最后一個子節點列表之后添加一個新的子節點。

語法:

appendChild(newnode)

參數:

newnode:指定追加的節點。

我們來看看,div標簽內創建一個新的 P 標簽,代碼如下:

運行結果:

HTML
JavaScript
This is a new p

 

 

13.插入節點insertBefore()

insertBefore() 方法可在已有的子節點前插入一個新的子節點。

語法:

insertBefore(newnode,node);

參數:

newnode: 要插入的新節點。

node: 指定此節點前插入節點。

我們在來看看下面代碼,在指定節點前插入節點。

運行結果:

This is a new p
JavaScript
HTML

注意: otest.insertBefore(newnode,node); 也可以改為:  otest.insertBefore(newnode,otest.childNodes[0]); 

 

14.刪除節點removeChild()

removeChild() 方法從子節點列表中刪除某個節點。如刪除成功,此方法可返回被刪除的節點,如失敗,則返回 NULL。

語法:

nodeObject.removeChild(node)

參數:

node :必需,指定需要刪除的節點。

我們來看看下面代碼,刪除子點。

運行結果:

HTML
刪除節點的內容: javascript

注意: 把刪除的子節點賦值給 x,這個子節點不在DOM樹中,但是還存在內存中,可通過 x 操作。

如果要完全刪除對象,給 x 賦 null 值,代碼如下:

 

 

 

15.替換元素節點replaceChild()

replaceChild 實現子節點(對象)的替換。返回被替換對象的引用。 

語法:

node.replaceChild (newnode,oldnew ) 

參數:

newnode : 必需,用於替換 oldnew 的對象。 
oldnew : 必需,被 newnode 替換的對象。

我們來看看下面的代碼:

 

效果: 將文檔中的 Java 改為 JavaScript。

注意: 

1. 當 oldnode 被替換時,所有與之相關的屬性內容都將被移除。 

2. newnode 必須先被建立。 

 

 

16.創建元素節點createElement

createElement()方法可創建元素節點。此方法可返回一個 Element 對象。

語法:

document.createElement(tagName)

參數:

tagName:字符串值,這個字符串用來指明創建元素的類型。

注意:要與appendChild() 或 insertBefore()方法聯合使用,將元素顯示在頁面中。

我們來創建一個按鈕,代碼如下:

<script type="text/javascript">
   var body = document.body; 
   var input = document.createElement("input");  
   input.type = "button";  
   input.value = "創建一個按鈕";  
   body.appendChild(input);  
 </script>  

效果:在HTML文檔中,創建一個按鈕。

我們也可以使用setAttribute來設置屬性,代碼如下:

<script type="text/javascript">  
   var body= document.body;             
   var btn = document.createElement("input");  
   btn.setAttribute("type", "text");  
   btn.setAttribute("name", "q");  
   btn.setAttribute("value", "使用setAttribute");  
   btn.setAttribute("onclick", "javascript:alert('This is a text!');");       
   body.appendChild(btn);  
</script>  

效果:在HTML文檔中,創建一個文本框,使用setAttribute設置屬性值。 當點擊這個文本框時,會彈出對話框“This is a text!”。

 

 

17.創建文本節點createTextNode

createTextNode() 方法創建新的文本節點,返回新創建的 Text 節點。

語法:

document.createTextNode(data)

參數:

data : 字符串值,可規定此節點的文本。

我們來創建一個<div>元素並向其中添加一條消息,代碼如下:

運行結果:

 

 

 

18.瀏覽器窗口可視區域大小

獲得瀏覽器窗口的尺寸(瀏覽器的視口,不包括工具欄和滾動條)的方法:

一、對於IE9+、Chrome、Firefox、Opera 以及 Safari:

•  window.innerHeight - 瀏覽器窗口的內部高度

•  window.innerWidth - 瀏覽器窗口的內部寬度

二、對於 Internet Explorer 8、7、6、5:

•  document.documentElement.clientHeight表示HTML文檔所在窗口的當前高度。

•  document.documentElement.clientWidth表示HTML文檔所在窗口的當前寬度。

或者

Document對象的body屬性對應HTML文檔的<body>標簽

•  document.body.clientHeight

•  document.body.clientWidth

在不同瀏覽器都實用的 JavaScript 方案:

var w= document.documentElement.clientWidth
      || document.body.clientWidth;
var h= document.documentElement.clientHeight
      || document.body.clientHeight;


19.網頁尺寸scrollHeight

scrollHeight和scrollWidth,獲取網頁內容高度和寬度。

一、針對IE、Opera:

scrollHeight 是網頁內容實際高度,可以小於 clientHeight。

二、針對NS、FF:

scrollHeight 是網頁內容高度,不過最小值是 clientHeight。也就是說網頁內容實際高度小於 clientHeight 時,scrollHeight 返回 clientHeight 。

三、瀏覽器兼容性

var w=document.documentElement.scrollWidth
   || document.body.scrollWidth;
var h=document.documentElement.scrollHeight
   || document.body.scrollHeight;

注意:區分大小寫

scrollHeight和scrollWidth還可獲取Dom元素中內容實際占用的高度和寬度。

 

 

20.網頁尺寸offsetHeight

offsetHeight和offsetWidth,獲取網頁內容高度和寬度(包括滾動條等邊線,會隨窗口的顯示大小改變)。

一、值

offsetHeight = clientHeight + 滾動條 + 邊框。

二、瀏覽器兼容性

var w= document.documentElement.offsetWidth
    || document.body.offsetWidth;
var h= document.documentElement.offsetHeight
    || document.body.offsetHeight;



21.網頁卷去的距離與偏移量

我們先來看看下面的圖:

scrollLeft:設置或獲取位於給定對象左邊界與窗口中目前可見內容的最左端之間的距離 ,即左邊灰色的內容。

scrollTop:設置或獲取位於對象最頂端與窗口中可見內容的最頂端之間的距離 ,即上邊灰色的內容。

offsetLeft:獲取指定對象相對於版面或由 offsetParent 屬性指定的父坐標的計算左側位置 。

offsetTop:獲取指定對象相對於版面或由 offsetParent 屬性指定的父坐標的計算頂端位置 。

注意:

1. 區分大小寫

2. offsetParent:布局中設置postion屬性(Relative、Absolute、fixed)的父容器,從最近的父節點開始,一層層向上找,直到HTML的body。

 

 
 

五、JS學習之DOM及案例

轉自或參考:JS學習之DOM及案例
https://blog.csdn.net/huangql517/article/details/80476171

 

1、DOM簡介

 

當網頁被加載時,瀏覽器會創建頁面的文檔對象模型(Document Object Model,簡稱DOM)。

即當瀏覽器載入HTML文檔時, 它就會成為DOM對象,而在JS中,所有的事物都是節點,

元素、文本等都是節點。可以通過節點進行DOM對象的增刪改查。

既然HTML在被瀏覽器加載時會對應的生成DOM對象,而JS又可以通過節點來操作DOM,所以,JS

完全可以創建動態的HTML,

看一下實際當中的一些場景,js是怎么處理的,案例如下。

 

2、先來點語法

2.1、獲取DOM節點的方法
//通過id獲取,唯一的
var oDiv = document.getElementById('box');
//通過類名獲取,返回數組形式,所以可以加索引取值
var oDiv = document.getElementsByClassName('.box')[0];
//通過標簽名獲取
var oDiv = document.getElementsByTagName('div')[0];

2.2、常用的DOM節點

 

 

2.3、節點的增刪改查

 

 

 

 

 

// 刪除元素上的class屬性
oH2.removeAttribute('class');
// 刪除創建的DOM對象
oDiv.removeChild(oH2);
// 父節點.replaceChild(新節點,子節點) 用新節點替換某個子節點
var op = document.createElement('p');
op.innerText = '我是一個段落';
oDiv.replaceChild(op,oH2);

3、模態框案例

 

// 獲取dom元素
var btn = document.getElementById('btn');
// 1、創建divdom元素
var oDiv = document.createElement('div');
var oP = document.createElement('p');
var oSpan = document.createElement('span');
// 2、設置各dom元素的屬性,方便后續定位操作,寫樣式等
oDiv.id = 'box';
oP.id = 'content';
oSpan.id = 'span1';
oP.innerHTML = '模態框成功彈出';
oSpan.innerHTML = '關閉';
// 3、部署dom元素,理清層級關系
oDiv.appendChild(oP);
oP.appendChild(oSpan);
//給按鈕添加點擊事件
btn.onclick = function(){
//動態的添加到一個divbody中,並且在btn前面
console.log(this);//當前this指向的是當前按鈕元素
this.parentNode.insertBefore(oDiv,btn);
};
//點擊span標簽就觸發刪除節點函數,刪除整個divoSpan.onclick = function(){
// removeChild()刪除節點
oDiv.parentNode.removeChild(oDiv)
}

樣式自己設置下,最終效果如下,頁面首先展示一個button按鈕,點擊彈出模態框(div塊>p標簽>span標簽),

再點擊span(關閉),則刪除div塊,回到頁面初始的樣子,

 

 

 

 

4、點擊有驚喜案例

 

    <style>
#box{
width: 200px;
height: 200px;
background-color: green;
line-height: 200px;
text-align: center;
}
</style>
</head>
<body>
    <div id="box">
點擊有驚喜
</div>
</body>
    <script type="text/javascript">
var box = document.getElementById('box');
console.log(box);
var n=0;
box.onclick = function(){
n++;
if(n%4==1){
this.style.backgroundColor='blue';
this.innerText = '2222'
}else if(n%4==2){
this.style.backgroundColor='red';
this.innerText = '3333'
}else if(n%4==3){
this.style.backgroundColor='yellow';
this.innerText = '4444'
}else{
this.style.background = 'transparent';
this.innerText = '';
}
        }
</script>

初始頁面有個div盒子,樣式已設置,js里面現在通過id找到dom元素,再通過一個自增n對4取余的結果來改變dom元素

屬性,比如上面的背景色和蚊子內容,達到點擊一直切換的效果。

效果如下

 

 

 

 

六、jquery的dom操作實例

轉自或參考:DOM操作之屬性和樣式操作
https://www.cnblogs.com/yuyujuan/p/9410428.html

在DOM操作,除了前面的節點操作以外,常常被用到的操作還有屬性操作和節點操作,下面,主要來總結一下jQuery中的屬性操作方法和樣式操作方法。

在開始操作前,我們需要先在html中添加如下代碼,后面所有的操作都是基於該DOM結構進行的。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript" src="jquery-3.2.1.js"></script>
  <style>
    .red{
      color:red;
    }
    .blue{
      color:blue;
    }
    .yellow{
      color:yellow;
    }
    </style>
</head>
<body>
  <p title="選擇你最喜歡的水果">你最喜歡的水果是?</p>
  <ul>
    <li title='蘋果' class="red">蘋果</li>
    <li title='香蕉'>香蕉</li>
    <li title='荔枝'>荔枝</li>
    </ul>
  <script>
  
  </script>
</body>
</html>

屬性操作

獲取和設置屬性

在前面我們提到過一個方法attr(),通過給該方法添加一個參數(屬性名稱),可以獲取相應信息。

$(function(){
     var txt = $("ul li:eq(1)").attr("title");
     console.log(txt);
})

當給該方法傳遞多個參數時,可以用來設置相關屬性。

$(function(){
        $("ul li:eq(1)").attr("title","最喜歡的水果");
        $("ul li:eq(2)").attr({"title":"水果","name":"荔枝"});
 })

 刪除屬性

在jQuery中,使用removeAttr()方法刪除某個元素的特點屬性。

 $(function(){
       $("p").removeAttr("title");
 })

樣式操作

獲取和設置樣式

因為class也是和title一樣,也屬於元素的屬性,所以,我們可以使用attr()來獲取和設置元素的class。

 
                                                    
$(function(){
  var txt1 = $("ul li:eq(0)").attr("class");
  console.log(txt1);
  $("ul li:eq(0)").attr("class","blue");
  var txt2 = $("ul li:eq(0)").attr("class");
  console.log(txt2);
})
 
                                                   

   

使用attr()方法設置樣式時,新的樣式覆蓋了之前的樣式。

添加樣式

有的時候,我們希望為某個元素添加樣式,但是又不覆蓋之前原有的樣式,很明顯,attr()並不能滿足我們的要求,這個時候,我們需要用到一個新的方法addClass(),該方法是在不改變原有樣式的基礎上,在后面添加新的樣式。

 $(function(){
        var txt1 = $("ul li:eq(0)").attr("class");
        console.log(txt1);
        $("ul li:eq(0)").addClass("blue");
        var txt2 = $("ul li:eq(0)").attr("class");
        console.log(txt2);
 })

   

移除樣式

 在上面,我們知道可以用removeAttr()方法刪除元素的屬性,自然,這個方法可以用來刪除元素的樣式。

$(function(){
       $("ul li:eq(0)").removeAttr("class");
 })

 

除了刪除屬性的方法外,jQuery中,還有一個專門用來刪除元素樣式的方法:removeClass(),參數為需要刪除的類名,該方法可以同時刪除一個或多個樣式,多個類名中間用空格間隔即可,當該方法不帶參數時,表明要刪除該元素的所有方法。

 $(function(){
       $("ul li:eq(0)").removeClass("red");
 })

  

判斷是否含有某個樣式

hasClass()方法可以用來判斷元素中是否含有某個class,如果有,返回true,否則,返回false。

 $(function(){
       var txt1 = $("ul li:eq(0)").hasClass("red");
        var txt2 = $("ul li:eq(1)").hasClass("red");
        console.log(txt1);
        console.log(txt2);
 })

 

 

本文轉自:js的dom操作整理(整理) - 石海瑩 - 博客園
https://www.cnblogs.com/shihaiying/p/11724361.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM