insertBefore,看名字就是在某个元素前插入元素,但是其实它可以再文档任何元素强势插入。

insertBefore用法:

parent.insertBefore(newChild, refChild)

即该方法必须在你希望插入到前面的父元素上调用.该方法带有两个参数.前一个是你希望插入的元素,后一个是你希望插入到该元素的前面。

我们看几个例子。

有这样的html:

    <div id="wrapper">
        <p id="a">AAAAA</p>
        <p id="b">BBBBB</p>
        <p id="c">CCCCC</p>
        <p id="d">DDDDD</p>
    </div>    

1)insertBefore第二个参数可以使null。

var newp1 = document.createElement('p');
newp1.innerHTML = 'insertBefore,第二个参数是null';

wrapper.insertBefore(newp1, null) 

效果和appendChild一样。

2)通常用法

var newp3 = document.createElement('p');
newp3.innerHTML = 'insertBefore, 插到b前面'

wrapper.insertBefore(newp3, b) 

3)插到第一个元素之前,也就是插到最前面

var newp4 = document.createElement('p');
newp4.innerHTML = 'insertBefore, 插入到最前面'

wrapper.insertBefore(newp4, wrapper.firstChild)

4)插入到最后一个元素之前

var newp5 = document.createElement('p');
newp5.innerHTML = 'insertBefore, 插入到最后元素的前面'

wrapper.insertBefore(newp5, wrapper.lastChild)

哎。。。不对,怎么不是插到最后一个前面。。。。

我们把lastChild打印出来看一下

lastChild是个文本节点,所以其实插到最后一个前面了。。。

其实firstChild就是childNodes[0],而lastChild就是childNodes[childNodes.length-1]

childNodes在不同浏览器下可能表现不一致,有的只包括元素节点,IE好像是这样,有的还包括文本节点,所以在使用时需要判断一下nodeType是不是3(文本节点),或者1(元素节点)。

哎。。。怎么说着说着insertBefore说到childNodes了。。。。

关于insertBefore的更多相关文章

  1. 使用insertBefore实现insertAdjacentHTML()

    Element.insertAdjacentHTML()方法由IE引入,并在HTML5中标准化,它将任意的HTML标记字符串插入到指定的元素“相邻”的位置. insertAdjacentHTML()有 ...

  2. mui,css3 querySelector,appendChild,style.display,insertBefore

    <script> mui.init({ swipeBack:true //启用右滑关闭功能 }); window.addEventListener('toggle', function(e ...

  3. 【笔记】js parentsNode,lastChild,appendChild,insertBefore,nextSibling的意义及运用

    这几天看书看到这几个属性做几个笔记 parentNode:顾名思义,就是获取某元素的父元素等同于jq的parent(). *注意一下,在调用parentNode 方法的时候 调用的对象必须是用ID 或 ...

  4. (转)appendChild()、insertBefore()是移动element节点!

    原文地址 appendChild().insertBefore()是移动element节点,看书的时候注意过,也可以做一个简单的例子测试一下: <div id="div1"& ...

  5. jquery的insertBefore(),insertAfter(),after(),before()

    insertBefore():a.insertBefore(b) a在前,b在后, a:是一个选择器,b:也是一个选择器 <!DOCTYPE html> <html> < ...

  6. js:插入节点appendChild insertBefore使用方法

    首先 从定义来理解 这两个方法: appendChild() 方法:可向节点的子节点列表的末尾添加新的子节点.语法:appendChild(newchild) insertBefore() 方法:可在 ...

  7. insertBefore的兼容性问题

    父级.insertBefore(新的元素,被插入的元素)方法 在指定的元素前面插入一个新元素 在ie下如果第二个参数的节点不存在,会报错 在其他浏览器下如果第二个参数不存在,则会以appendChil ...

  8. 创建删除元素appendChild,removeChild,createElement,insertBefore

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  9. HTML DOM insertBefore() 方法 使用的时候发现一个问题,记录下

    在W3C中是这样定义的   第二个参数是可先的,但是在谷歌浏览器和火狐浏览器中测试是会有bug的,第二个参数是必填的,否则会报错 感兴趣的可以测试 以下是我测试的结果: 谷歌浏览器:Uncaught ...

  10. 【笔记】after,before,insertAfter,insertBefore的作用

    这几个方法的作用是插入外部节点,所谓外部插入节点就是我们平常在网页编程中手动添加代码到某一句语句的前面或后面,如图: 红色框的P是在蓝色框span的前面插入的外部节点,反过来说蓝色框的span是在红色 ...

随机推荐

  1. CSS3之边框图片border-image

    CSS3中有关border的属性,还有很多,今天我将为大家介绍一个很好玩的属性——Border-image.有了CSS3之边框图片Border-image,我们可以轻松搞定圆角,轻松搞定很多之前难搞的 ...

  2. iOS开发-控件设置

    一.用户界面控件共有三种基本模式:动态.静态(非动态)和被动 动态:点击它们时会发生事情——通常是出发一段自己编写的时间代码. 被动:仅用于存储用户输入的值,以备后续使用.这些控件不会触发任何操作方法 ...

  3. TableControl大小变化

    TableControl跟随Form大小变化: 选中TableControl,而不是TablePage,右侧Layout: 可以对其设置居上.居下等位置

  4. C#WinForm应用程序实现自动填充网页上的用户名和密码并点击登录按钮【转载】

    使用WebBrowser控件,在documentComplete事件处理器里写 HtmlElement name = webBrowser1.Document.GetElementById(" ...

  5. "无法启动程序,因为计算机中丢失*.dll” 运行exe错误解决方法

    笔者把编译生成的win32 Release exe文件复制到另外一台电脑上,却发现程序不能运行,报错如下: 报错提示缺失动态链接库pcl_common_release.dll,那为什么在编译生成的电脑 ...

  6. 详解Android ActionBar之一:ActionBar概述与创建

    前面一个系列中讲的是Fragment的内容,Android 3.0中除Fragment外,Action Bar同样也是一个很重要的知识点.我们经常使用Action Bar来替代传统的标题栏.如果是An ...

  7. ios开发——实战OC篇&SQLite3的实际应用

    SQLite3的实际应用 前面的文章中介绍了SQlite,并且介绍了他的各种语法及使用方法. 但是没有正在项目中使用特,今天就开始做一个小小的实例,就是使用SQLite3来实现数据库的相应操作并且把他 ...

  8. 启动hbase时,hregionserver没有启动的原因

    今天配置hbase的时候发现有几台机器的regionserver启不来.报错例如以下: at sun.reflect.NativeConstructorAccessorImpl.newInstance ...

  9. C 双向链表

    单链表的结点都只有一个指向下一个结点的指针 单链表的数据元素无法直接访问其前驱元素 逆序访问单链表中的元素是极其耗时的操作! len = LinkList_Length(list); for (i=l ...

  10. 我的开发框架(WinForm)4

    日志模块 对于一个系统来说,日志模块是必不可少的,它能给后面系统的维护和bug的修复,带来极大的方便..net的日志模块有很多,比较流行的有Log4Net,NLog,还有微软企业库的日志模块,我采用的 ...