美文网首页
js进阶四:DOM

js进阶四:DOM

作者: 蘭小木 | 来源:发表于2020-01-16 23:40 被阅读0次

DOM

document对象

获取元素节点方法

getElementsByName("name")

返回带有指定名称的对象集合。

getElementsByTagName("标签名")

返回带有指定标签名的对象集合。

getElementById("id")

返回对拥有指定 id 的第一个对象的引用。

getElementsByClassName("classname")

  • 可以根据class属性值对象集合,
  • 但是该方法不支持IE8及以下的浏览器

querySelector("css选择器")

根据CSS选择器去页面中查找对象

  • querySelector()只会返回一个符合条件的元素

  • 如果符合条件的元素有多个,它只会返回第一个

      var box2 = document.querySelector("#box2");
    

querySelectorAll()

根据CSS选择器去页面查找一组元素

  • 和querySelector()功能类似,都可以根据CSS选择器去查找

  • 不同的是querySelectorAll()它会将所有符合条件的元素封装到一个数组中返回,

  • 即使查询到的只有一个,也会返回数组

     var boxArr = document.querySelectorAll("#box");
    

createElement()

创建一个指定元素节点对象

var gzLi = document.createElement("li");

createTextNode()

可以根据文本内容创建一个文本节点对象

var gzText = document.createTextNode("广州");

document对象属性

body

获取页面中body元素

相当于 document.getElementsByTagName("body")[0]

document.body;  

documentElement

获取页面中的根元素(html元素)

document.documentElement;

all

获取页面中所有的元素,返回的是一个数组
相当于 document.getElementsByTagName("*")


DOM Element元素对象

属性

元素节点.nodeValue

dom.nodeValue;

元素节点.nodeName

获取节点值

元素节点.nodeType

获取节点类型

元素节点.innerHTML

可以用来获取标签内部的文本内容

元素节点.innerText

可以用来获取标签内部的文本内容,它会自动去除HTML标签

节点操作

childNodes

dom.childNodes;
  • 根据DOM标准,空白的内容也会被当成子节点
  • 注意在IE8及以下的浏览器中没有将空白当成子节点
  • 所以IE8中childNodes不会返回空白的节点
  • 返回的所有子节点(包括文本),代码中的换行空白部分也会被当成一个节点

children

获取所有的子元素(不包含文本)

firstChild

获取它的第一个子节点(包括文本)

firstElementChild

firstElementChild不支持IE8及以下的浏览器

获取它的第一个子节点(不包括文本)

parentNode

获取父节点

previousSibling

获取它的前一个兄弟节点

会将空白的文本当前兄弟节点

appendChild()

向父节点中添加新的子节点

父节点.appendChild(子节点)

boxDom.appendChild(imgDom);

insertBefore()

在指定的子节点前插入新的子节点

父节点.insertBefore(新的节点,旧的节点);

    var city = document.getElementById("city");
                    
    city.insertBefore(gzLi , bj);

replaceChild()

使用指定的子节点替换已有的子节点

父节点.replaceChild(新的节点,旧的节点);

removeChild()

删除一个子节点

父节点.removeChild(子节点);

实际上使用innerHTML也可以完成页面中元素的增删改查,而且比我们这种常规方式更加简单(最好只添加文本节点,添加元素节点的话其他的元素也会被重新添加)


CSS样式操作

修改元素样式

元素.style.样式名 = 样式值;

  • 注意样式名中带有-不能直接写
  • background-color

  • border-width

  • border-left-style

  • 这种带有-的样式名,需要将其修改为驼峰命名法,然后在操作,将-去掉,然后将-后的字母改大写

  • backgroundColor

  • borderWidth

  • 通过style修改的样式都是元素的内联样式,

  • 而内联样式的优先级最高的,所以我们通过JS修改的样式往往会立即显示

  • 但是如果在样式后添加了!important,则无法通过内联样式进行覆盖

  • 所以我们要尽量去避免使用!important

读取元素样式

元素.style.样式名
  • 通过style只可以读取内联样式,不能读取样式表中的样式
  • 如果没有内联样式则不能读取
元素.currentStyle.样式名
  • 读取元素的当前生效的样式
  • currentStyle只有IE浏览器支持,在其他的浏览器中不好使
getComputedStyle()
  • 这个方法就是window的方法,可以直接使用
  • 参数:
    • 1.要获取样式的元素对象
    • 2.要获取的元素的伪类,如果不需要可以传null
  • 这个方法会返回一个对象,在这个对象中封装了元素的当前样式
  • 注意此方法IE8及以下的浏览器不支持
  • 通过currentStyle和getComputedStyle()读取到的样式都是只读的,不能修改
  • 如果需要修改,则需要使用style。
自定义用来获取任意浏览器中任意元素的当前样式
function getStyle(obj , name){

//判断浏览器中是否含有getComputedStyle这个方法
if(window.getComputedStyle){
//支持正常的浏览器
return getComputedStyle(obj,null)[name];
}else{
//只支持IE
return obj.currentStyle[name];
}

* 参数:
* obj 要获取样式的元素
* name 要获取的样式的名字
* 
* 在读取元素的样式时,如果元素没有设置样式,
* 火狐、Chrome等浏览器会自动计算元素的样式值
* 而IE浏览器,有使用不会自动计算,而是返回默认值,比如宽度会返回auto

属性操作

元素节点.属性名

获取标签对应属性的内容

dom.src;

class属性 需要用classname代替,因为class是js中的保留字

dom.classsname

getAttribute()

获取属性值

var attrVal = boxDom.getAttribute("class")

setAttribute()

把指定属性设置或修改为指定的值。

boxDom.setAttribute("class", "box");

removeAttribute()

移除属性值

boxDom.removeAttribute("class");

classList 操作class属性

  • 在HTML5 API里,页面DOM里的每个节点上都有一个classList对象,程序员可以使用里面的方法新增、删除、修改节点上的CSS类(即class属性值)。
  • 使用classList,程序员还可以用它来判断某个节点是否被赋予了某个CSS类。
length
div01.classList.length
add
div01.classList.add("box-blue");
remove
div01.classList.remove("box-green");
contains

检查是否包含指定class名

div01.classList.contains("box-green")
item

返回指定角标的class名

div01.classList.item(2)
toggle

如果class属性存在指定了类名删除该类名,否则添加

div01.classList.toggle("box-green")

dataset设置/读取自定义属性

div01.dataset.goodsDesc

H5中(data-goods-desc)      js中(div01.dataset.goodsDesc)
只可以传递字符串或数字
一般存储一个json字符串,然后获取到转换为json对象

获取元素的宽高/偏移量

clientWidth/clientHeight

  • 获取元素的可见宽度和高度

  • 获取到的值包括元素的内容区和内边距

  • 这些属性都是只读,只能看不能修改

    document.documentElement.clientHeight;//获取视口高度
    

offsetWidth/offsetHeight

  • 可以用来获取元素整个的可见框的大小
  • 它获取到的值,包括内容区、内边距和边框

getBoundingClientRect()

返回元素的大小及其相对于视口的位置信息集合。

var rect = boxDom.getBoundingClientRect();//返回元素的大小及其相对于视口的位置信息集合。

rect.top;//元素顶部距离视口顶部的距离
rect.bottom;//元素底部距离视口顶部的距离
rect.left;//元素左边框距离视口左边框的距离
rect.right;//元素右边框距离视口右边框的距离
rect.height;//元素高度
rect.width;//元素宽度

offsetParent

  • 可以返回当前元素的定位父元素
  • 定位父元素,指离当前元素最近的开启了定位的祖先元素
    如果所有的祖先元素都没有开启定位,则返回body

offsetLeft(水平偏移量)/offsetTop(垂直偏移量)

  • 获取当前元素相对于其定位父元素的偏移量

scrollHeight

  • 可以获取元素滚动区域的高度

scrollWidth

  • 可以获取元素滚动区域的宽度

      alert(box1.scrollWidth);
    

scrollTop

  • 垂直滚动条滚动的距离

scrollLeft

  • 水平滚动条滚动的距离

判断垂直滚动条是否滚动到底

scrollHeight - scrollTop = clientHeight

判断水平滚动条是否滚动到底

scrollWidth - scrollLeft = clientWidth

相关文章

  • js进阶四:DOM

    DOM document对象 获取元素节点方法 getElementsByName("name") 返回带有指定名...

  • JS进阶之DOM

    layout: posttitle: "JS进阶之DOM"date: 2016-05-31 13:28:27 +0...

  • 进阶篇:jQuery核心方法(20-3)

    饥人谷学习进阶第 20 天 jQuery对象和原生DOM对象的区别 DOM对象 是我们用传统JS方法获得的对象,j...

  • Day7:virtual dom & MVVM

    virtual dom 什么是virtual dom 虚拟dom 用JS模拟DOM结构 DOM变化的对比,放在JS...

  • JavaScript

    在JavaScript入门篇中,我们学习了如何插入JS、输出内容及简单的DOM操作,JavaScript进阶篇让您...

  • virtual dom

    virtual dom --- 即虚拟dom 1.用js模拟DOM结构 2.DOM变化的对比,放在js层来做(js...

  • JAVA 之 JS知识框架

    一、js的简介 二、js基本语法 三、js内建对象 四、js的函数 五、js的事件 六、js的bom 七、js的dom

  • React 入门(阮一峰教程笔记)

    一 react.js react-dom.js Brower.js react.js 核心库 react-dom....

  • DOM

    DOM JS的组成 ECMAScript js的基础语法 DOM 文档对象模型 BOM ...

  • 面试中React与Vue的比对 / 面试/mvvm/virtua

    1.virtual dom 用JS模拟DOM结构,DOM变化的对比,放在JS层做,以提高重绘性能 DOM操作昂贵,...

网友评论

      本文标题:js进阶四:DOM

      本文链接:https://www.haomeiwen.com/subject/dpwqzctx.html