day10 DOM下

一、元素节点

   // innerHTML   innerText
        // id 获取id值  className获取class属性值  title获取对应title属性值  style属性值
        // 对于input元素对应存在name属性值  value属性值
        // 对于img元素  存在src属性值
        // 对于a标签  存在href属性
        // 对于标签自身自带的属性  我们可以通过标签元素.属性名来获取对应的元素
        console.log(document.getElementsByTagName('div')[0].id);
        console.log(document.getElementsByTagName("a")[0].href);
        console.log( document.getElementsByTagName( 'div')[0].opo);//后天加上去不能获取
        var box = document.getElementsByTagName( 'div')[O]
        //通过attributes获取所有的属性
        console.log(box.attributes);//返回的是一个nameNodeMap里面包含的是多个数据
  / /nameNodeMap里面包含下标以及length属性还存在增改(set)别(remove)查(get)的方法
        var attrs = box.attributes
        //通过下标进行访问
        console.log(attrs[0]);//访问第一个属性节点
        //还可以通过键(属性名)来进行访问
        console.log(attrs [ 'opo']);//访问opo属性的内容
        // 访问里面的属性个数
        console.log(sttrs.length);//返回为3
        // 第三种方法
        // 通过item方法  获取是getNameItem方法
        console.log(attrs(0));//访问第一个属性 sttrs[0]=attrs.item(0)
        console.log(attrs.getNameItem('opo'));//访问名字为opo的属性内容  sttrs['opo']=attrs.getNameItem('opo')
        // 第四种 通过attrs.属性名  与attrs['opo']一致
        console.log(attrs.opo);

        // 设置   获取的是一个节点对象  attr对象  属性节点对象  设置的时候也要是属性节点对象
        attrs.opo="opo='123'"
        attrs.opo=attrs.id//只读的  不能直接进行赋值  可以重新设置
        attrs.removeNamedItem('opo')//删除这个属性名对应的属性节点

        // 属性操作  对于本身天生就有的元素  直接通过元素名.属性名  来获取属性值
        // 属性节点操作  sttr属性节点
        // attributes获取所有的属性节点 返回的是一个NameNodeMap
        // 可以通过下标以及对应的属性名
        // NameNodeMap里面存在三个方法 getNamedItem获取属性节点removeNameItem移除属性节点/ / setNameItem属性节点
        //属性节点不能直接进行赋值需要修改可以调用setNameItem 里面需要传入一个新的属性节点
        // var opo = document.createAttribute( 'opo ')创建属性节点
        //opo.value = 'hello’//给属性节点属性值
 
二、元素属性
  //属性操作对于本身天生就有的属性直接通过元素.属性名来获取属性值
        var box = document.getElementById( ' box ')
        //访问对应的class属性的属性值
        //所有的标签天生就有的属性id class style titleconsole.log(box.className);//对于本身天生就有的
        console.log(document.getElementsByTagName( 'a')[0].href);///也可以直接给这个属性赋值来进行更改
        box.className ='你吃饭了吗'
        //对于本身不是天生就有的
        console.log( box.name)//访问不到的返回值为undefined
        //可以通过getAttribute 来进行获取(只是里面的属性都可以获取)
        var name = box.getAttribute( 'name ')//参数1为属性名类型为string
        console.log(name);
        var boxClass = box.getAttribute( ' class ')//参数1为属性名
        console.log(boxClass);
        //可以通过对应的方法进行设置setAttribute
        box.setAttribute('username' , '123')//参数1为属性名参数2为属性值俩个类型都是string//设置一个属性属性名为username属性值为123
        //删除参数你需要删除的属性名removeAttributebox.
        removeAttribute( 'class ')//删除class属性

        //元素的三个方法 element的方法 getAttribute setAttribute removeAttribute属性操作(常用的)
        //NameNodeMap里面存在三个方法 getNamedItem获取属性节点 removeNameItem移除属性节点属性节点操作(一般不用)

        // 属性节点是属于节点对象  属性是属于元素的一个属性  属性在元素中被获取为节点
 
三、元素节点之间的关系
  <div class="box">
        <div class="innerbox">
            <b>4</b>
        </div>
        <p>2</p>
        <a>3</a>
    </div>
    <script>
        // 元素节点之间的关系   主要划分为父元素  子元素  兄弟元素  同胞元素
        // box里面包含了div和对应的p  a标签
        //  innerbox里面包含了b标签
        var innerBox = document.getElementById('innerBox')//获取innerbox这个元素
        //父节点 parentNode(一个)
        console.log( innerBox.parentNode);//获取父节点就是box  饭会node
        console.log(innerBox.parentElement);//获取父元素    返回element
        //子节点 children 获取子节点(获取的是多个)返回的是一个htmlcollection
        console.log(innerBox.children);//返回所有子元素节点
        console.log(innerBox.children[0])//获取第一个子元素,不包含文本节点
        // 节点集合
        console.log(innerBox.childNodes);//返回所有子节点 包含元素节点  文本节点 属性节点
        //获取第一个子节点  相当于 innerBox.children  firstChild这个获取的包含元素节点   还包含文本节点
        console.log(innerBox.firstChild);//获取第一个子节点(包含文本节点)
        console.log(innerBox.lastChild);//获取最后一个子节点 (包含文本节点)

        // 兄弟  处在一级的标签元素  多个  返回的是htmlCollection
        console.log(innerBox.nextSibling);//下一个兄弟  efg  包含空格  换行
        console.log(innerBox.previousSibling);//上一个兄弟节点  abc

        // 上一个兄弟元素节点
        console.log(innerBox.previousElementSibling);//没有返回null  有就返回  不包含文本
        // 下一个兄弟元素节点
        console.log(innerBox.nextElementSibling);//没有返回null


    </script>
 
四、元素节点操作方法
  document.createAttribute("属性名").value='属性值'//创建属性节点  必须要给属性节点赋值

        //1. 创建元素节点  需要传递标签名第一个参数  第二个参数为选项可省略
        var div=document.createElement('div')//创建一个元素 div  返回的类型是一个element
        div.className='hello'//给创建的div元素指定对应的class属性值
        div.innerText='吃饭了吗'//给创建的div设置文本
        //2. 添加子节点到最后  document不能直接添加子节点
        var body=document.getElementsByTagName('body')[0]//获取body
        body.appendChild(div)//给body添加一个子节点
            // insertBefore  添加子节点到某个子节点之前  第一个是你需要添加的节点  第二个是子节点
        //3. 删除子节点
        body.removeChild(div)
        // 4.替换子节点
        var p=document.createElement('p')
        p.innerText='我是p'
        body.replaceChild(p,div)//将div替换为p
        // 创建文本节点
        var text=document.createTextNode('你师祖')
        p.appendChild(text)//将文本添加到p标签   从后面添加
        // 克隆节点
        var text1=text.cloneNode//克隆一个新节点
        // 设置属性节点
        var uname=document.createAttribute('uname')
        uname.value="zhu"
        p.setAttributeNode(uname)//设置属性节点一般不用  建议使用 setAttribute
 
五、onscroll  滚动栏滚动事件
  // 给window添加一个滚动栏滚动事件
        window.onscroll=function(){
            console.log("触发了");
            //获取滚动栏离上面的距离  离上面的顶层距离  可视区域的距离
            // 具备浏览器兼容问题
            var scollTop=document.documentElement.scrollTop  | document.body.scrollTop
            document.querySelector('div').innerText=scollTop
        }
 
posted @ 2022-03-26 11:29  凌晨四点钟  阅读(22)  评论(0)    收藏  举报