美文网首页
DOM-->元素的操作

DOM-->元素的操作

作者: 卓小生 | 来源:发表于2016-10-06 16:21 被阅读0次

创建和插入元素

创建DOM元素

Document.createElement()

在一个HTML文档中, Document.createElement()方法用于创建指定的HTML元素

当指定未定义的元素时, 创建一个HTMLUnknownElement

var div = document.createElement('div');

Node.appendChild()

将一个节点插入到指定的父节点的最末尾处(也就是成为了这个父节点的最后一个子节点).

语法

var child = node.appendChild(child);
  • node 是要插入子节点的父节点.
  • child 即是参数又是这个方法的返回值.

示例

// 创建一个新的段落p元素,然后添加到body的最尾部
var p = document.createElement("p");
document.body.appendChild(p);

例子:留言板插入内容

插入元素

Node.insertBefore()

在当前节点的某个子节点之前再插入一个子节点

语法

var insertedElement = parentElement.insertBefore(newElement, referenceElement);

如果referenceElement为null则newElement将被插入到子节点的末尾。

如果newElement已经在DOM树中,newElement首先会从DOM树中移除

  • insertedElement 是被插入的节点,即 newElement
  • parentElement 是新插入节点的父节点
  • newElement 是被插入的节点
  • referenceElement 在插入newElement之前的那个节点

示例 1

<div id="parentElement">
  <span id="childElement">foo bar</span>
</div>

<script>

var sp1 = document.createElement("span");

var sp2 = document.getElementById("childElement");

var parentDiv = sp2.parentNode;

// Insert the new element into the DOM before sp2
parentDiv.insertBefore(sp1, sp2);
</script>

没有 insertAfter 方法。可以使用 insertBefore 方法和 nextSibling 来模拟它。

在前一个例子中,可使用下面代码将 sp1 插入到 sp2 后面:

parentDiv.insertBefore(sp1, sp2.nextSibling);

如果 sp2 没有下一个节点,则它肯定是最后一个节点,则 sp2.nextSibling 返回 null,且 sp1 被插入到子节点列表的最后面(即 sp2 后面)。

示例 2

在第一个子元素的前面插入一个元素,可使用 firstChild 属性。

var parentElement = document.getElementById('parentElement');
var theFirstChild = parentElement.firstChild;


var newElement = document.createElement("div");

parentElement.insertBefore(newElement, theFirstChild);

当元素没有首节点时,firstChild 返回 null。该元素仍然会被插入到父元素中,位于最后一个节点后面。又由于父元素没有第一个子节点,也没有最后一个子节点。 最终,新元素成为唯一的子元素。

例子:倒序留言板插入内容

删除和替换元素

删除DOM元素

Node.removeChild

语法

从某个父节点中移除指定的子节点,并返回那个子节点.

var oldChild = node.removeChild(child);
  • child 是要移除的那个子节点.
  • node 是child的父节点.
  • oldChild 和child指向同一个节点,即oldChild === child.

被移除的这个子节点仍然存在于内存中,只是没有添加到当前文档的DOM树中,因此,你还可以把这个节点重新添加回文档中,当然,实现要用另外一个变量比如上例中的oldChild来保存这个节点的引用.

如果上例中的child节点不是node节点的子节点,则该方法会抛出异常.

示例

<!--示例HTML代码-->
<div id="top" align="center">
  <div id="nested"></div>
</div>

<script>
// 先定位父节点,然后删除其子节点
var d = document.getElementById("top");
var d_nested = document.getElementById("nested");
var throwawayNode = d.removeChild(d_nested);
// 无须定位父节点,通过parentNode属性直接删除自身
var node = document.getElementById("nested");
if (node.parentNode) {
  node.parentNode.removeChild(node);
}
// 移除一个元素节点的所有子节点
var element = document.getElementById("top");
while (element.firstChild) {
  element.removeChild(element.firstChild);
}   
</script>

替换DOM元素

Node.replaceChild

用指定的节点替换当前节点的一个子节点,并返回被替换掉的节点。

语法

replacedNode = parentNode.replaceChild(newChild, oldChild);
  • newChild 用来替换 oldChild 的新节点。如果该节点已经存在于DOM树中,则它会被从原始位置删除。
  • oldChild 被替换掉的原始节点。
  • replacedNode 和oldChild相等。

例子

// <div>
//  <span id="childSpan">foo bar</span>
// </div>

// 创建一个空的span元素节点
// 没有id,没有任何属性和内容
var sp1 = document.createElement("span");

// 添加一个id属性,值为'newSpan'
sp1.setAttribute("id", "newSpan");

// 创建一个文本节点
var sp1_content = document.createTextNode("新的span元素的内容.");

// 将文本节点插入到span元素中
sp1.appendChild(sp1_content);

// 获得被替换节点和其父节点的引用.
var sp2 = document.getElementById("childSpan");
var parentDiv = sp2.parentNode;

// 用新的span元素sp1来替换掉sp2
parentDiv.replaceChild(sp1, sp2);

// 结果:
// <div>
//   <span id="newSpan">新的span元素的内容.</span>
// </div>

其他

Node.hasChildNodes()

Node.hasChildNodes方法返回一个布尔值,表示当前节点是否有子节点。

var foo = document.getElementById("foo");

if (foo.hasChildNodes()) {
  foo.removeChild(foo.childNodes[0]);
}

一个例子: 遍历当前节点的所有后代节点

function DOMComb(parent, callback){
    if( parent.hasChildNodes() ){
        for(var node=parent.firstChild; node; node=node.nextSibling){
            DOMComb(node, callback);
        }
    }

    callback(parent);
    
}

Node.cloneNode()

Node.cloneNode方法用于克隆一个节点。它接受一个布尔值作为参数,表示是否同时克隆子节点,默认是false,即不克隆子节点。

var cloneUL = document.getElementsByTagName('ul')[0].cloneNode(true);

需要注意的是,克隆一个节点,会拷贝该节点的所有属性,但是会丧失addEventListener方法和on-属性(即node.onclick = fn),添加在这个节点上的事件回调函数。

克隆一个节点之后,DOM树有可能出现两个有相同ID属性(即id="xxx")的HTML元素,这时应该修改其中一个HTML元素的ID属性。

Node.remove()

Element.remove方法用于将当前元素节点从DOM树删除。

var el = document.getElementById('div-01');
el.remove();

相关文章

  • DOM-->元素的操作

    创建和插入元素 创建DOM元素 Document.createElement() 在一个HTML文档中, Docu...

  • DOM-->操作元素属性多种方式

    操作元素属性的多种方式 setAttribute getAttribute removeAttribute 操作h...

  • 常规DOM操作

    访问和修改DOM元素修改DOM元素的样式,造成重绘和重排版通过DOM事件处理用户响应 DOM--文档对象模型一 ...

  • DOM-->表单操作

    表单 HTML 元素 表示了文档中的一个区域,这个区域包含有交互控制元件,用来向web服务器提交信息。 nam...

  • jQuery常见问题

    1, jQuery 能做什么? 选择网页元素 改变结果集 元素的操作:取值和赋值 元素的操作:移动 元素的操作: ...

  • jQuery(Tab切换)

    1: jQuery 能做什么? 选择网页元素 改变结果集 元素的操作:取值和赋值 元素的操作:移动 元素的操作:复...

  • jQuery

    题目1: jQuery 能做什么? 选择网页元素 改变结果集 元素的操作:取值和赋值 元素的操作:移动 元素的操作...

  • 进阶14 jQuery 基础

    题目1: jQuery 能做什么? 选择网页元素 改变结果集 元素的操作:取值和赋值 元素的操作:移动 元素的操作...

  • jQuery基础知识

    题目1: jQuery 能做什么? 选择网页元素 改变结果集 元素的操作:取值和赋值 元素的操作:移动 元素的操作...

  • jQuery简单介绍

    题目1: jQuery 能做什么? 选择网页元素 改变结果集 元素的操作:取值和赋值 元素的操作:移动 元素的操作...

网友评论

      本文标题:DOM-->元素的操作

      本文链接:https://www.haomeiwen.com/subject/quieyttx.html