DOM文档操作

       文档对象代表网页,如果希望访问 HTML 页面中的任何元素,那么总是从访问 document 对象开始。

一、查找 HTML 元素

1. 方法介绍

  • document.getElementById('id')                                       通过元素 id 来查找元素。
  • document.getElementsByTagName('name')                   通过标签名来查找元素。
  • document.getElementsByClassName('name')                通过类名来查找元素。
  • document.querySelector('CSS选择器')                           通过CSS选择器选择一个元素。
  • document.querySelectorAll('CSS选择器')                       通过CSS选择器选择多个元素。

2. 方法演示 

<body>
    <button id="btn">我是按钮</button>
    <button>我是按钮</button>
    <button class="btn2">我是按钮</button>
    <button class="btn3">我是按钮</button>

    <ul class="list">
        <li>列表项1</li>
        <li>列表项2</li>
        <li>列表项3</li>
        <li>列表项4</li>
    </ul>

    <script>
        var btn = document.getElementById("btn");
        console.log(btn);//创建一个按钮,通过id获取按钮节点对象

        var btn1 = document.getElementsByTagName("button");
        console.log(btn1);//创建一个按钮,通过标签名获取按钮节点对象数组

        var btn2 = document.getElementsByClassName("btn2");
        console.log(btn2);//创建一个按钮,通过类名获取按钮节点对象数组

        var btn3 = document.querySelector(".btn3");
        console.log(btn3);//创建一个按钮,通过类名获取按钮节点对象数组

        var list = document.querySelectorAll(".list li");
        console.log(list);//创建一个按钮,通过类名获取按钮节点对象数组
    </script>
</body>

 二、获取 HTML 的值

1. 方法介绍 

  • 元素节点.innerText                                            获取 HTML 元素的 inner Text。
  • 元素节点.innerHTML                                         获取 HTML 元素的 inner HTML。
  • 元素节点.属性                                                   获取 HTML 元素的属性值。
  • 元素节点.getAttribute('attribute')                        获取 HTML 元素的属性值。
  • 元素节点.style.样式                                           获取 HTML 元素的行内样式值。

2. 方法演示 

  <body>
    <button id="btn">我是按钮</button>

    <div id="box">
        <h1>我是Box中的大标题</h1>
    </div>

    <a id="a" href="https://www.baidu.com">打开百度,你就知道!</a>
   
    <div style="width: 100px;height: 100px;background: red;" id="box2"></div>

    <script>
        //创建一个按钮,然后获取按钮的文本内容
        var btn = document.getElementById("btn");
        console.log(btn.innerText);

        //创建一个div,然后在div中插入一个h1标题,获取div中的html代码
        var box = document.getElementById("box");
        console.log(box.innerHTML);

        //创建一个超链接,默认为空,设置href属性为https://www.baidu.com ,使用JavaScript代码读取href属性
        var a = document.getElementById("a");
        console.log(a.href);
        //创建一个超链接,默认为空,设置href属性为https://www.baidu.com ,使用JavaScript代码读取href属性
        console.log(a.getAttribute("href"));

        //创建一个正方形div,默认颜色为红色,使用JavaScript代码获取div的宽度
        var box = document.getElementById("box2");
        console.log(box.style.width);
    </script>
</body>

 拓展练习:编写一段兼容性代码,用来获取任意标签的文本内容

<body>
    <a href="https://www.baidu.com" id="a">打开百度,你就知道!</a>

    <script>
        var a = document.getElementById("a");
        console.log(getInnerText(a));

        /*获取任意标签的内容*/
        function getInnerText(element) {
            // 判断浏览器是否支持textContent,如果支持,则使用textContent获取内容,否则使用innerText获取内容。
            if (typeof element.textContent == "undefined") {
                return element.innerText;
            } else {
                return element.textContent;
            }
        }
    </script>
</body>

三、改变 HTML 的值 

 1. 方法介绍

  • 元素节点.innerText = new text content                   改变元素的 inner Text。
  • 元素节点.innerHTML = new html content               改变元素的 inner HTML。
  • 元素节点.属性 = new value                                     改变 HTML 元素的属性值。
  • 元素节点.setAttribute(attribute, value)                    改变 HTML 元素的属性值。
  • 元素节点.style.样式 = new style                             改变 HTML 元素的行内样式值。

2. 方法演示 

<body>
    <button id="btn">我是按钮</button>
    <div id="box"></div>
    <a id="a" href="">打开百度,你就知道!</a>
    <div style="width: 100px;height: 100px;background: red;" id="box"></div>

    <script>
        //创建一个按钮,然后改变按钮的文本内容
        var btn = document.getElementById("btn");
        btn.innerText = "我是JavaScript的按钮";
        console.log(btn);

        //创建一个div,然后在div中插入一个h1标题
        var box = document.getElementById("box");
        box.innerHTML = "<h1>我是Box中的大标题</h1>";
        console.log(box);

        //创建一个超链接,默认为空,使用JavaScript代码设置href属性为https://www.baidu.com **
        var a = document.getElementById("a");
        a.href = "https://www.baidu.com";
        console.log(a);

        var a = document.getElementById("a");
        a.setAttribute("href", "https://www.baidu.com");
        console.log(a);

        //创建一个正方形div,默认颜色为红色,使用JavaScript代码改变为绿色
        var box = document.getElementById("box");
        box.style.background = "green";
        console.log(box);
    </script>
</body>

注意:如果CSS的样式名中含有-,这种名称在JS中是不合法的比如background-color,需要将这种样式名修改为驼峰命名法,去掉-,然后将-后的字母大写,我们通过style属性设置的样式都是行内样式,同样的获取也是行内样式,而行内样式有较高的优先级,所以通过JS修改的样式往往会立即显示,但是如果在样式中写了!important,则此时样式会有最高的优先级,即使通过JS也不能覆盖该样式,此时将会导致JS修改样式失效,所以尽量不要为样式添加!important

 拓展练习:编写一段兼容性代码,用来设置任意标签的文本内容

<body>
    <a href="https://www.baidu.com" id="a">打开百度,你就知道!</a>

    <script>
        var a = document.getElementById("a");
        setInnerText(a, "你要打开百度吗?");
        console.log(getInnerText(a));

        /*获取任意标签的内容*/
        function getInnerText(element) {
            // 判断浏览器是否支持textContent,如果支持,则使用textContent获取内容,否则使用innerText获取内容。
            if (typeof element.textContent == "undefined") {
                return element.innerText;
            } else {
                return element.textContent;
            }
        }

        /*设置任意标签的内容*/
        function setInnerText(element, text) {
            // 判断浏览器是否支持textContent,如果支持,则使用textContent设置内容,否则使用innerText设置内容。
            if (typeof element.textContent == "undefined") {
                return element.innerText = text;
            } else {
                return element.textContent = text;
            }
        }
    </script>
</body>

 四、修改 HTML 元素

1. 方法介绍 

  • document.createElement(element)                   创建 HTML 元素节点。
  • document.createAttribute(attribute)                   创建 HTML 属性节点。
  • document.createTextNode(text)                         创建 HTML 文本节点。
  • 元素节点.removeChild(element)                        删除 HTML 元素。
  • 元素节点.appendChild(element)                        添加 HTML 元素。
  • 元素节点.replaceChild(element)                        替换 HTML 元素。
  • 元素节点.insertBefore(element)                         在指定的子节点前面插入新的子节点。

2. 方法演示

(1)案例演示:创建一个空的ul列表,然后在该列表中追加2个li标签 

方法1:

<body>
    <script>
        var ul = document.createElement("ul");

        var li1 = document.createElement("li");
        var text1 = document.createTextNode("列表项1");
        li1.appendChild(text1);
        ul.appendChild(li1);

        var li2 = document.createElement("li");
        var text2 = document.createTextNode("列表项2");
        li2.appendChild(text2);
        ul.appendChild(li2);

        document.getElementsByTagName("body")[0].appendChild(ul)
    </script>
</body>

方法2:

<body>
<script>
    var ul = document.createElement("ul");

    var li1 = document.createElement("li");
    li1.innerHTML = "列表项1";
    ul.appendChild(li1);

    var li2 = document.createElement("li");
    li2.innerHTML = "列表项2";
    ul.appendChild(li2);

    document.getElementsByTagName("body")[0].appendChild(ul);
</script>
</body>

方法3:

<body>
    <script>
        var ul = document.createElement("ul");

        var li1 = "<li>列表项1</li>";
        var li2 = "<li>列表项2</li>";
        ul.innerHTML = li1 + li2;

        document.getElementsByTagName("body")[0].appendChild(ul);
    </script>
</body>

(2)案例演示:创建一个ul列表,里边有四个li子元素,删除第一个li,替换最后一个li

<body>
    <ul id="ul">
        <li id="first">列表项1</li>
        <li>列表项2</li>
        <li>列表项3</li>
        <li id="last">列表项4</li>
    </ul>

    <script>
        var ul = document.getElementById("ul");
        var first = document.getElementById("first");
        var last = document.getElementById("last");

        /*删除第一个*/
        ul.removeChild(first);

        /*替换最后一个*/
        var replaceLi = document.createElement("li");
        replaceLi.innerHTML = "列表4的替换";
        ul.replaceChild(replaceLi, last);
    </script>
</body>

(3)案例演示:创建一个ul列表,里边有四个li子元素,在第一个li前边插入一个id为zero的li

<body>
    <ul id="ul">
        <li id="first">列表项1</li>
        <li>列表项2</li>
        <li>列表项3</li>
        <li>列表项4</li>
    </ul>

    <script>
        var ul = document.getElementById("ul");
        var first = document.getElementById("first");

        var zero = document.createElement("li");
        zero.innerHTML = "列表0的新增";

        ul.insertBefore(zero, first);
    </script>
</body>

五、查找 HTML 父子

1. 方法介绍

  • 元素节点.parentNode                    返回元素的父节点。
  • 元素节点.parentElement               返回元素的父元素。
  • 元素节点.childNodes                     返回元素的一个子节点的数组(包含空白文本Text节点)。
  • 元素节点.children                          返回元素的一个子元素的集合(不包含空白文本Text节点)。
  • 元素节点.firstChild                         返回元素的第一个子节点(包含空白文本Text节点)。
  • 元素节点.firstElementChild            返回元素的第一个子元素(不包含空白文本Text节点)。
  • 元素节点.lastChild                          返回元素的最后一个子节点(包含空白文本Text节点)。
  • 元素节点.lastElementChild            返回元素的最后一个子元素(不包含空白文本Text节点)。
  • 元素节点.previousSibling               返回某个元素紧接之前节点(包含空白文本Text节点)。
  • 元素节点.previousElementSibling                 返回指定元素的前一个兄弟元素(相同节点树层中的前一个元素节点)。
  • 元素节点.nextSibling                       返回某个元素紧接之后节点(包含空白文本Text节点)。
  • 元素节点.nextElementSibling         返回指定元素的后一个兄弟元素(相同节点树层中的下一个元素节点)。

2. 方法演示 

<body>
    <div id="box">
        <ul id="ul">
            <li><a href="https://www.baidu.com">我是超链接1</a></li>
            <li id="two"><a href="https://www.baidu.com">我是超链接2</a></li>
            <li><a href="https://www.baidu.com">我是超链接3</a></li>
            <li><a href="https://www.baidu.com">我是超链接4</a></li>
        </ul>
    </div>

    <script>
        var box = document.getElementById("box");
        var ul = document.getElementById("ul");
        var two = document.getElementById("two");

        console.log(ul.parentNode);
        console.log(ul.parentElement);
        console.log("===============");

        console.log(box.childNodes);
        console.log(box.children);
        console.log("===============");

        console.log(ul.firstChild);
        console.log(ul.firstElementChild);
        console.log(ul.lastChild);
        console.log(ul.lastElementChild);
        console.log("===============");

        console.log(two.previousSibling);
        console.log(two.previousElementSibling);
        console.log(two.nextSibling);
        console.log(two.nextElementSibling);
    </script>
</body>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值