原生JavaScript操作DOM的方法

使用原生的JavaScript操作DOM主要有下面的几种需求:

  • 获取元素
  • 添加元素
  • 删除元素
  • 更改元素

下面结合代码来说明使用原生JavaScript实现上面的需求。

HTML结构:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Node And Element</title>
    </head>
    <body>
        <div class="first">
             one
            <p id="myPara">1</p>
            <p>2</p>
            <p>3</p>
            <p>4</p>
            <p>5</p>
        </div>

    </body>
</html>

 

1. 获取元素

主要使用querySelector()和querySelectorAll()。前者返回匹配的第一个元素,后者返回匹配的元素数组(NodeList),接收的参数是CSS选择器。

var paraElement = document.querySelectorAll('p') ;
var divElement = document.querySelector('div#first') ;

2. 插入元素

使用insertAdjacentHTML()。是html元素的方法。可以向指定位置插入指定的html内容。

element.insertAdjacentHTML(position, text);

参数:

position

相对调用这个方法的element在DOM中的位置,有四种值可选:

  • 'beforebegin': Before the element itself.

          element之前(兄弟元素)

  • 'afterbegin': Just inside the element, before its first child.

         element之内(第一个子元素之前)

  • 'beforeend': Just inside the element, after its last child.

         element之内(最后一个子元素之后)

  •  'afterend': After the element itself

         element之后(兄弟元素)

text

字符串形式的html内容

divElement.insertAdjacentHTML('beforeend','<p>6</p>') ;

3. 删除元素

有两种方式可以实现元素的删除:

(1)  Node.remove()

可以直接删除某个节点

注意:这是一个实验性质的API,请不要在生产环境中使用。

(2)  Node.removeChild()

删除某个节点的子节点

Node.removeChild(child)

参数:

child

待删除的Node的子节点

Node

child节点的父节点

返回值

被删除的子元素

使用这个方法,首先要获取被删除节点的父节点。

var firstParaElement = document.querySelector('p#myPara') ;
var parentNode = firstParaElement.parentNode ;
parentNode.removeChild(firstParaElement) ;

因此我们可以封装一个用于删除指定节点的方法:

function removeElement(node) {
var parent = node.parentNode ;
parent.removeChild(node) ;
}

4. 修改元素

修改元素主要使用元素(Element)的innerHTML和innerText属性。

Element.innerHTML

用来获取或者设置包含在Element内部的html或者xml内容。

HTMLElement.innerText

用来获取元素内部渲染后的文本内容,包括后代元素的文本内容。

var paraElement = document.querySelectorAll('p') ;
var divElement = document.querySelector('div#first') ;
console.log(divElement.innerHTML) ; 
console.log(divElement.innerText) ;

div节点的innerHTML属性:

one

<p id="myPara">1</p>

<p>2</p>

<p>3</p>

<p>4</p>

<p>5</p>

div节点的innerText属性:

one

1

2

3

4

5

一张图解释innerHTML和innerText区别:

结论:

(1)  获取

获取元素内部的文本,可以使用innerHTML或者innerText,如果元素内部还有子元素,那么innerText还可以获取子元素的文本内容,但是不会获取标签。

只有innerHTML可以获取全部内容。

(2)  设置

如果我只想设置文本内容,那么使用innerHTML或者innerText都可以。如果想设置html内容,那么只能使用innerHTML。

 

posted on 2019-07-17 12:25  勇士_Curry  阅读(472)  评论(0编辑  收藏  举报