JS(DOM)

90 阅读3分钟

DOM 文档对象模型

JS运行到HTML文件中,由HTML文件提供了DOM的能力

比如:

添加一个div

删除一个li

修改一个ol

获取某一个标签的样式

修改某一个标签的样式

给某一个标签添加事件

给某一个标签添加属性

DOM的核心是document

document 是 JS 内置的一个对象, 内部提供了很多属性和方法, 帮我们便捷的操作页面标签

DOM: 1. 文档对象模型 2. 标签

DOM 获取标签



 语法1document.querySelector('像写css选择器一样书写标签')
 返回值:符合条件的第一个标签
 
 语法2document.querySelectoeAll('像写css选择器一样书写标签')
 返回值 :返回一个符合条件的变迁组成的伪数组
 
 伪数组
 长得很像数组,也没有下标,也没有length,但是数组的方法,很多都没有

   // 获取到页面的div标签并存储在一个变量oDiv中,(变量名并不重要)
   
   var oDiv=document.querySelector('div')
   //console.log(oDiv)
   
   var oSpan =document.querySelector('span')
   //console.log(oSpan)
   
   var mySpan = document.querySelectorAll('.spanel')
        console.log(mySpan)
        // console.log(mySpan[0])
   
   

DOM获取样式

//获取样式
//元素/标签.style  能够拿到 行内 样式, 或者给添加一个行内样式
//getComputedStyle('要查询样式的标签').要查询的样式名
//能够获取到元素的样式 (行内和非行内都可以)
// 但是获取到的内容是只读的, 只允许查询, 不允许修改


  var oDiv = document.querySelector('div')
        var myDiv = document.querySelector('.box')

        // console.log(oDiv.style.width)
        // console.log(oDiv.style.height)
        // console.log(oDiv.style.background-color)   // color is not defined
        // console.log(oDiv.style.'background-color')   // 语法不支持
        // console.log(oDiv.style['background-color'])  // 能够获取 但是稍微有点麻烦
        // console.log(oDiv.style.backgroundColor) // 推荐写法
        
        
         // 因为元素的样式添加在了 类名, 也就是非行内的, 所以 style 获取不到
        // console.log(myDiv.style.width)
        // console.log(myDiv.style.height)

        // getComputedStyle('要查询样式的标签').要查询的样式名
        // console.log(getComputedStyle(myDiv).width)
        // console.log(getComputedStyle(myDiv).height)

// 非行内样式 和 行内样式, 都能正常获取, 但是获取到的值 不能被修改
        console.log(getComputedStyle(oDiv).width)

        // getComputedStyle(oDiv).width = '800px'

随机背景

 
  <button>点击按钮背景变色</button>
  <script>
   // 0. 获取标签
   var btn=document.querySelector('#btn')
   var body=document.querySelector('body')
   
    /**
         *  添加事件
         * 
         *      1. 声明一个数组, 数组内部存放各种各样的颜色
         *      2. 点击事件触发的时候, 随机从数组内拿到一个颜色
         *      3. 赋值给 body 的背景色
        */
      // 1. 声明一个数组, 数组内部存放各种各样的颜色   
       var arr = ['#000000', '#ffffff', '#ff0000', '#00ff00', '#0000ff', '#ffff00', '#800080', '#ffa500']
       
       btn.onclick=function(){
       var num=Math.floor(Math.random()*arr.length)
       body.style.backgroundColor = arr[num]
        
}
  </script>



操作元素类名

操作元素类名

元素/标签.className =>能够得到元素目前拥有的类名 还可以给这个属性重新赋值,然后修改当前标签的类名

元素/标签.classList 返回值 是一个伪数组 数组内下表对应的是我们的每一个类名 value 属性对应的是我们完整类名的字符串

// 1. className
        // console.log(box.className)
        // box.className = 'box2'   // 当前方式 不管之前有多少类名, 全都重新覆盖掉
        // box.className = box.className + ' box2'
        // box.className += ' box2'    // 类名之间一定要加 空格
        // box.className = ''  // 相当于清空之前的所有类名

        // 2. classList
        // console.log(box.classList)

        box.classList.add('box2')   // 向这个标签上在追加一个类名, 原本的类名不受影响
        box.classList.remove('qwe') // 删除指定类名 
        box.classList.remove('asd')

DOM 操作元素属性


// 1.获取标签属性
console.log(box.getAttrbute('class'))
var res =box.getAttribute('qwe')
console.log(res)

//2.设置标签属性
box.setAttribute('my_qwe',这是通过JS添加的一个自定义属性')
box.setAttribute('class', 'qf001')
box.setAttribute('qwe', '通过 JS 将 qwe 的属性值 进行了一个修改')

  /**
         *  3. H5 新增自定义属性
         * 
         *      h5 自定义属性在书写的时候有一个 固定的开头就是 data-
         *          完整语法: data-属性名=属性值
         * 
         *      获取的语法:
         *          元素/标签.dataset.属性名(属性名不要带data-)
         * 
         *      注意点: 在设置的时候 不要采用驼峰, 全小写, 因为哪怕你大写了, 浏览器也会转换为 小写
        */
        // console.log(box.dataset.name)
        // console.log(box.dataset)
        
           box.dataset.newname = '通过 JS 新增的一个 h5 自定义属性'

密码框


//基础版
   <input type="password"></input>
   <button>点击显示/隐藏密码<button>
   
   var inp=document.querySelector('input')
   var btn =document.querySelecyt('button')
   
   btn.onclick=function(){
   if(inp.getAttribute('type')==='password){
   inp.setAttribute('type','text')
   }else{
   inp.setAttribute('type','password')
   }
   }
   
   //优化版
    <input type="password"></input>
   <button>点击显示/隐藏密码<button>
   
   var inp=document.querySelector('input')
   var btn =document.querySelecyt('button')
   
   btn.onclick=function(){
   inp.type=input.type==='password'?'type':'password'
   }