首頁 > web前端 > js教程 > 主體

JS DOM元素常見增刪改查操作詳解

php中世界最好的语言
發布: 2018-05-11 15:24:20
原創
3420 人瀏覽過

這次帶給大家JS DOM元素常見增刪改查操作詳解,JS DOM元素常見增刪改查操作的注意事項有哪些,下面就是實戰案例,一起來看一下。

DOM概念

DOM(Document Object Model):文件物件模型。

透過開發者工具的Elements標籤頁可以查看

透過開發者工具的Sources標籤頁也可以觀察到整個文件是有一系列節點

整個文件是由一系列節點物件組成的一棵樹。

節點(Node)包含元素節點(1)、屬性節點(2)、文字節點(3)(1..2..3..代表節點類型)_

var th1= document.getElementById("th1");
alert(th1.nodeType);
alert(th1.nodeName);
alert(th1.nodeValue);
登入後複製

# th1代表一個元素節點(nodeType=1),nodeName就是標籤名稱(th),元素節點的nodeValue=null。

var attr1=th1.getAttributeNode("name");
alert(attr1.nodeType);
alert(attr1.nodeName);
alert(attr1.nodeValue);
登入後複製

getAttributeNode方法是取得元素的屬性節點,此時輸出的節點類型為屬性節點(2),節點名稱就是屬性名稱(name),節點值就是屬性值(sex)

var txtl = th1.firstChild;
alert(txtl.nodeType);
alert(txtl.nodeName);
alert(txtl.nodeValue)
登入後複製

txt1是一個文字節點(3),節點名稱固定就是#text,節點值就是文字內容。

取得元素

(1)getElementByid

根據元素的id屬性來取得元素,取得到的是一個元素。

(2)getElementsByTagName

#根據標籤名稱來取得元素,結果就是一個元素集合。

(3)getElementsByClassName

根據class屬性來取得元素,結果是一個元素集合。

(4)getElementsByName

根據name屬性來取得元素,結果是一個元素集合。

總結:取得元素可以根據標籤名稱取得、也可以根據id、name、class屬性來取得。根據id屬性所獲得的結果是一個元素,而其它的獲取的是一個集合。

document物件支援以上四種,而element物件僅支援getElementsByTagNamegetElementsByClassName

修改元素

(1)修改內容

function fun(){
  //获取到指定元素
  var p1 = document.getElementById("p1");
  p1.innerText = "我被单击了!";
}
登入後複製

透過.innerText屬性可讀取或設定標籤的內容文字

function fun(){
  //获取到指定元素
  var p1 = document.getElementById("p1");
  p1.innerHTML = "我被单击了!<br>换行了";
}
登入後複製

也可以透過innerHTML屬性取得或設定內容文本

兩位者的差異:innerHTML會依照HTML規則解析文本,而innerText只是當做普通文本內容。

(1)  修改樣式

A. xxx. style.屬性名=“值”

B. xxx. classname=「…」(相當於修改了class的屬性)

<style>
    .style1{
      color:red;
      font-size:20px;
      text-decoration:underline;
    }
    .style2{
      color:blue;
      font-size:32px;
      text-decoration:line-through;
    }
  </style>
</head>
<body>
<p id="p1">修改样式测试</p>
<input type="button"value="样式一"onclick="style1()">
<input type="button"value="样式二"onclick="style2()">
</body>
<script>
  var p1 = document.getElementById("p1");
  function style1(){
    p1.className = "style1"
  }
  function style2(){
    p1.className = "style2"
  }
</script>
</html>
登入後複製

新增刪除元素

(1)CreateElement建構一個元素節點

CreateElement("p")建立一個段落

(2)createTextNode建立一個文字節點

createTextNode("文字內容"),建立一個值為「文字內容」的文字節點.

#(3)appendChild新增子節點

(4 )removeChild  刪除子節點

動態新增

<body>
<p id="p1">
</p>
<input type="button"value="添加段落"onclick="add()">
</body>
<script>
//全局变量
  var index = 1;
  function add(){
    //创建一个段落标签
    var p = document.createElement("p");
    //创建文本节点
    var content= "第"+index+"段落";
    var txt = document.createTextNode(content);
    //创建文本节点添加的段落
    p.appendChild(txt);
    //将段落添加到p中
    var p1 = document.getElementById("p1");
    p1.appendChild(p);
    index++
  }
</script>
登入後複製

動態刪除

<body>
<p id="p1">
  <p id="p1">第1段落 </p>
  <p id="p2">第2段落 </p>
  <p id="p3">第3段落 </p>
  <p id="p4">第4段落 </p>
</p>
<input type="button"value="删除第二段"onclick="del()">
</body>
<script>
  function del(){
    //先找到父节点
    var p1 = document.getElementById("p1");
    //再找到要删除的节点
    var p2 = document.getElementById("p2");
    //将要删除的节点从父节点中移除
    p1.removeChild(p2);
  }
</script>
</html>
登入後複製

這種方法是分別找到父節點和要刪除的節點,然後執行刪除操作。這個方法的一個前提是知道父節點是誰

那麼如果不知道父節點是誰,該如何刪除呢

p2.parentNode.removeChild(p2);

這個方法並不需要父節點是誰

動態的新增與刪除:

動態新增和動態刪除,刪除動態新增的奇數段落

思路1:获取p1 下的所以段落,遍历所以的段落,将序号为奇数的段落删除。

function del(){
  var p1 = document.getElementById("p1");
  var paras = p1.getElementsByTagName("p");
  for(var i in paras){
    if((i+1)%2 == 1){
      p1.removeChild(paras[i]);
    }
  }
}
登入後複製

这种在初始时是可以的,但是随着动态添加或删除的进行,后面的结果就不对了。因为动态删除操作就影响了原来的顺序,而程序是按照序号去判断奇偶性,所以出现误判

思路2:添加通过设置class属性,然后通过getElementsByclassName来获取奇数行

(也可以从后往前删)

<body>
<p id="p1">
</p>
<input type="button" value="添加段落" onclick="add()">
<input type="button" value="删除奇数第二段" onclick="de1()">
</body>
<script>
  var index = 1;
  function add(){
    //创建一个段落标签
    var p = document.createElement("p");
    //创建文本节点
    var content = "第" + index + "段落";
    var txt = document.createTextNode(content);
    //将文本节点添加到段落
    p.appendChild(txt);
    if (index % 2 == 1) {
      p.setAttribute("class","odd");
    }
    //将段落添加到p中
    var p1 = document.getElementById("p1");
    p1.appendChild(p);
    index++;
  }
  /*function de1(){
   var p1 = document.getElementById("p1");
   var paras =p1.getElementsByTagName("p");
   for(var i in paras){
   if((i+1)%2 == 1){
   p1.removeChild(paras[i]);
   }
   }
   }*/
  functionde1() {
    var p1 = document.getElementById("p1");
    var paras = p1.getElementsByClassName("odd");
//    varparas = document.getElementsByName("odd");
    for (var i = paras.length - 1; i >= 0; i--) {
      p1.removeChild(paras[i]);
    }
  }
</script>
</html>
登入後複製

导航

Document:是根节点

ParentNode:获取父节点

childNodes:获取所有子节点

firstChild:第一个子节点

lastChlid:获取最后一个子节点

</head>
<body>
<p name="第一章">
   <p id="p1">第一段<span>第一句</span><span>第二句</span></p>
</p>
<input type="button"value="获取父节点的name属性"onclick="fun1()">
<input type="button"value="显示p1子节点的个数"onclick="fun2()">
<input type="button"value="显示p1第一个子节点的类型"onclick="fun3()">
<input type="button"value="显示p1最后一个子节点的类型"onclick="fun4()">
</body>
<script>
var p1 =document.getElementById("p1");
function fun1(){
  var value=p1.parentNode.getAttribute("name");
  alert(value);
}
function fun2(){
  var chlids = p1.childNodes;
  alert(chlids.length)
}
function fun3(){
  alert(p1.firstChild.nodeType);
}
function fun4(){
  alert(p1.lastChild.nodeType);
}
</script>
</html>
登入後複製

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

JS保留一位数字后移除非数字

node puppeteer实现网站登录步骤详解(附代码)

以上是JS DOM元素常見增刪改查操作詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板