前端

JavaScript DOM

2020-03-20  本文已影响0人  无尾树袋熊

DOM开篇

  1. 什么是DOM?
  1. 什么是document文档对象?
  1. 标签, 元素都是 HTML标签的称呼

获取界面上的元素

  1. 自定义对象
function Person() {}
var per = new Person();
  1. 内置对象
Array/String/Boolean/Number/...
  1. 宿主对象

通过标签名称获取界面上的元素

  1. 通过ID获取界面上的元素
    var oDiv = document.getElementById("father");
    console.log(oDiv);
    console.log(oDiv);
  1. 通过类名获取界面上的元素
    var oDiv = document.getElementsByClassName("son");
    console.log(oDiv);
    console.dir(oDiv);
  1. 通过标签名称获取界面上的元素
    var oDiv = document.getElementsByTagName("div");
    console.log(oDiv);
  1. 通过name属性名称来获取界面上的元素
    var oDiv = document.getElementsByName("pp");
    console.log(oDiv);
  1. 根据选择器来获取界面上的元素
var oDiv = document.querySelector("div>.son");
console.log(oDiv);
var oDiv = document.querySelectorAll("div");//找到所有的

文档加载过程


节点

获取元素

  1. 获取子元素
    var oDiv = document.querySelector(".son1");
    console.log(oDiv);
  1. 通过子元素获取父元素
    • 一般情况下在JS中带Element单词的属性或者方法都有兼容性问题
    • parentElement: 获取父元素
    • arentNode:获取父节点,拿到的不一定是一个元素(DOM节点(标签节点/属性节点/文本节点))
    // var oDiv = document.querySelector(".son1");
    var oDiv = document.querySelector("html");
    var oFDiv = oDiv.parentElement; //null(父元素)
    // var oFDiv = oDiv.parentNode; //#document(父节点)
    console.log(oFDiv);
  1. 通过指定元素找到上/下一个元素
    var oDiv = document.querySelector(".son1");
    //上一个元素
    // var oPDiv = oDiv.previousElementSibling || oDiv.previousSibling;
    // console.log(oPDiv);
    //下一个元素
    var oNDiv = oDiv.nextElementSibling || oDiv.nextSibling;
    console.log(oNDiv);
  1. 通过指定元素找到所有的子节点/子元素
    var oDiv = document.querySelector("#father");
    // var oCDiv = oDiv.childNodes;//[text, p, text, div.son1, text, p, text, div.son2, text]
    var oCDiv = oDiv.children;// [p, div.son1, p, div.son2, hh: p, pp: p]
    console.log(oCDiv);

节点之间的增删改查

  1. 创建一个元素:createElement
  2. 添加到界面上:
    • appendChild()添加到指定元素中的末尾
    • insertBefore(,)将第一个参数的元素插入到第二个参数元素的前面
  3. 删除指定的元素: parentNode.removeChild();只能通过父节点调用removeChild删除子节点
    var oDiv = document.querySelector(".son1");
    var oA = document.createElement("a");
    // oDiv.appendChild(oA);
    var op = document.querySelector(".pp");
    oDiv.insertBefore(oA,op);
    op.parentNode.removeChild(op);

节点属性的操作

  1. 获取取节点的属性
    1. 直接获取(通过DOM查询到对应的元素之后,返回给我们的是一个对象)
    2. 通过getAttribute方法获取
    var oImg = document.querySelector("img");
    // console.log(oImg.alt); //这是alt
    // console.log(oImg.title); //这是title
    // console.log(oImg.src); //http://localhost:63342/Js/%E7%BB%83%E4%B9%A0/images/ad1.jpg
    // console.log(oImg.yzf); //undefined
    console.log(oImg.getAttribute("src")); //images/ad1.jpg
    console.log(oImg.getAttribute("title")); //这是title
    console.log(oImg.getAttribute("alt")); //这是alt
    console.log(oImg.getAttribute("yzf")); //hello
  1. 删除属性
    1. 直接删除(不能删除自定义属性)
    2. 通过removeAttribute方法来删除
var oImg = document.querySelector("img");
oImg.alt = "";
oImg.removeAttribute("yzf");
  1. 设置属性的值
    1. 直接设置
    2. 通过setAttribute方法来设置
    3. 注意:有就修改,没有就新增
oImg.title = "修改后的title";
oImg.yzf = "修改后的yzf";//不能修改自定义属性
oImg.setAttribute("yzf", "修改后的yzf");
oImg.setAttribute("zx", "新增的zx属性")

innerHTML属性

var oDiv = document.querySelector(".son1");
console.log(oDiv.innerHTML);//<p class="pp">我是段落</p>
oDiv.innerHTML = "<p class=\"p\">我是修改后的段落</p>";
console.log(oDiv.innerHTML);

innerText属性

var oDiv = document.querySelector(".son1");
console.log(oDiv.innerText);//我是段落
oDiv.innerText = "<a>我是a标签</a>";
console.log(oDiv.innerText);//<a>我是a标签</a>

textContent属性

var oDiv = document.querySelector(".son1");
console.log(oDiv.textContent);//          我是段落1
oDiv.textContent = "<a>我是a标签</a>";
console.log(oDiv.textContent);//<a>我是a标签</a>
var oDiv = document.querySelector(".son1");
//兼容处理
function setInnerText(obj,ctx) {
    if("textContent" in obj){
        obj.textContent = ctx;
    }else {
        obj.innerHTML = ctx;
    }
}
setInnerText(oDiv, "<a>我是a标签</a>");

注意点:

<input type="hello" value="这是value">
var oInput = document.querySelector("input");
console.log(oInput.innerHTML);//空
console.log(oInput.innerText);//空
console.log(oInput.textContent);//空

console.log(oInput.value);//这是value
console.log(oInput.getAttribute("value"));//这是value

设置节点的样式

  1. 通过style属性来设置
    • 如果是设置宽度和高度,需要添加单位, 否则会报错
    • CSS中用-连接的属性名称, 都会去掉-,将后面一个单词的首字母大写
var oDiv = document.querySelector(".father1");
oDiv.style.width = "100px";
oDiv.style.height = "100px";
oDiv.style.backgroundColor = "red";
console.log(oDiv.style.width); //返回一个字符串
  1. 通过className属性来设置
    • 默认情况下通过元素对象操作元素的属性时,都是自带的是什么名称, 操作的时候就是什么名称
    • class是js的一个关键字,所以这里就将HTML标签的class属性的名称改为了className
var oImg = document.querySelector("img");
console.log(oImg.alt);
oImg.className = "box";//不能写.box
  1. 如果是操作个别的样式,那么推荐使用style属性
  2. 如果是操作多个的样式,那么推荐使用className属性
上一篇 下一篇

猜你喜欢

热点阅读