简单入门Dom

366 阅读2分钟

DOM:

Document object Model(文档对象模型)是HTML文档对象模型(HTML DOM)定义的一套标准方法,用来访问和操纵HTAL文档

一、选取方式

1.通过id获取对象

<div id="dom1"> 我是Dom</div>
<script>
   console.log(document.getElementById('dom1')); //打印结果<div id="dom1"> 我是Dom</div>
</script>

2.通过标签名获取对象, 获取到的是一个元素的集合,通过下标来选取对应的元素

<div id="dom1"> 我是Dom</div>
<script>
    console.log(document.getElementsByName('div'));//打印结果>NodeList []
    
</script>

3.class属性获取对象

 <div id="dom1" class="cl1"> 我是Dom</div>
<div>我是Dom2</div>
<div>我是Dom3</div>
<script>
   console.log(document.getElementsByClassName('cl1'));//打印结果HTMLCollection [div#dom1.cl1, dom1: div#dom1.cl1]
</script>

4.通过querySelector获取 后面可以写id、class以及标签,(只会获取第一个)

  <div id="dom1" class="cl1"> 我是Dom</div>
  <div>我是Dom2</div>
  <div>我是Dom3</div>
  <script>
   console.log(document.querySelector('.cl1'));//打印结果<div id="dom1" class="cl1"> 我是Dom</div>
    console.log(document.querySelector('div'));//打印结果<div id="dom1" class="cl1"> 我是Dom</div>
    console.log(document.querySelector('#dom1'));//打印结果<div id="dom1" class="cl1"> 我是Dom</div>
</script>

5.通过querySelectorAll获取,就是选取全部

  <div id="dom1" class="cl1"> 我是Dom</div>
<div>我是Dom2</div>
<div>我是Dom3</div>
<script>
   console.log(document.querySelectorAll('div'));//打印结果>NodeList(3) [div#dom1.cl1, div, div]
</script>

二、改变内容

  1. innerHtml 替换原本的内容,可以识别html标签 通过点击事件改变内容

    我是一句话
    //点击div后内容会改为:我不是一句话,并变成一级标题

2.innerText 替换原本的内容,不可识别HTML标签

 <div onclick="fn()">我是一句话</div>//点击后替换为<h1>我不是一句话</h1>
<script>
    function fn(){
        document.querySelector('div').innerText = '<h1>我不是一句话</h1>'
    }
</script>

3.点击替换img图片

 <button onclick="fn()">平安夜快乐</button>
<div>平安夜是个黑暗的夜晚</div>
<img src="" alt="">
<script>
    function fn(){
        let img = document.querySelector('img');//选中img标签,改为img变量
        img.src = 'https://img0.baidu.com/it/u=1649397542,3448252443&fm=26&fmt=auto';
        //改变img的路径
        img.width = '300';//设置宽度
        img.height = '300';//设置高度
    }
</script>

三、设置样式

document.querySelector('对象').style = '' 相当于css内联样式(行内样式) 例如:给一个div添加宽高,背景颜色

<div id="dd"></div>
<script>
    let div = document.querySelector('div');
    div.style.width = '200px';  //在style后的值要加上单位
    div.style.height = '200px'; 
    div.style.backgroundColor = 'red';//拼接的样式要用驼峰命名去掉-后,后面的首字母大写
</script>
练习

有一个div宽高50px背景蓝色,用js给它设置点击后宽高100px 背景红色,用过渡2秒实现,代码如下:

<div onclick="fn()"></div>
<style>
    div{
        width: 50px;
        height: 50px;
        background-color: blue;
    }
</style>
<script>
    function fn(){
        let div = document.querySelector('div');
        div.style.width = '100px';
        div.style.height = '100px';
        div.style.backgroundColor = 'red';
        div.style.transition = 'all 2s linear';
    }
</script>

四、节点

节点的是以数组的形式得到返回值,换行和空额都会成为一个节点

1.parentNode 父节点

给li父节点设置背景颜色为红色,代码如下

     <div> 
    <ul>
        <li></li>
    </ul>
</div>
<script>
    let li = document.querySelector('li');
    //获取父节点
    console.log(li.parentNode);
    document.querySelector('li').parentNode.style.background = 'red';
</script>

2.childNodes 子节点

只返回子节点,如果有空格或者换行,也会被算成一个子节点

  <div> 
    <ul>
        <li></li>
    </ul>
</div>
<script>
    let ul =document.querySelector('ul');
    //获取子节点
    console.log(ul.childNodes);//放回值>NodeList(3) [text, li, text]
</script>
子节点练习

选择器选择到div
通过div来找到h1 把h1改成背景是红色字体 大小变成28px 通过div来找到ul把ul改成背景是绿色
通过div来找到h2 把h2的宽度变成20epx 高度变成108px 背景色改成蓝色
代码如下:

<div>
    <h1>11</h1>
    <ul></ul>
    <h2>22</h2>
</div>
<script>
    let div = document.querySelector('div');
    console.log(div.childNodes);//返回值>NodeList(7) [text, h1, text, ul, text, h2, text]
    div.childNodes[1].style.background = 'red';
    div.childNodes[1].style.fontSize = '20px';
    div.childNodes[3].style.width = '200px';
    div.childNodes[3].style.height = '100px';
    div.childNodes[3].style.background = 'green';
    div.childNodes[5].style.width = '200px';
    div.childNodes[5].style.height = '100px';
    div.childNodes[5].style.background = 'blue';

</script>

3.nextSibling 下一个节点

 <div>
    <h1>11</h1>
    <ul></ul>
    <h2>22</h2>
</div>
 <script>
    let div = document.querySelector('div');
    console.log(div.childNodes);//返回值>NodeList(7) [text, h1, text, ul, text, h2, text]
 console.log(div.firstChild.nextSibling);//得到的返回值 <h1>11</h1>
</script>

4.previousSibling 上一个节点

 <div>
    <h1>11</h1>
    <ul></ul>
    <h2>22</h2>
</div>
 <script>
    let div = document.querySelector('div');
    console.log(div.childNodes);//返回值>NodeList(7) [text, h1, text, ul, text, h2, text]
 console.log(div.lastChild.previousSibling);//得到的返回值 <h2>22</h2>
</script>
上一个节点和下一个节点练习

获得div元素通过使用firstchild 和 nextSibling的方式把ul的color属性变成红色

获得div元素通过使用lastchild 和 previoussibling的方式把h2的font-size属性变成5epx

<div>
    <ul>我是ul</ul>
    <h2>我是h2</h2>
</div>
<script>
    let div = document.querySelector('div');
    div.firstChild.nextSibling.style.color = 'red';
    div.lastChild.previousSibling.style.fontSize = '50px'
</script>