巧用 firstElementChild

firstElementChild:是用于返回DOM对象的第一个子元素。

举个小例子了解一下:

  <div>
      <p>123</p>
      <p>456</p>
  </div>

  var oDiv=document.getElementsByTagName("div")[0];
  console.log(oDiv.firstElementChild)  //<p>123</p>

我们平时可能都会用到jq的append( )或者原生的innerHTML方法,就是将字符串变成html语言,渲染在页面上,我经常用在写插件的地方。
例如我想渲染一个按钮到页面上:

  function renderBtn(){
           var str="<button id='btn'>按钮</button>";
           var dom=createDOMFromString(str);
           document.body.appendChild(dom)
   }

   function createDOMFromString (str) {
           var tmpDiv = document.createElement('div');
           tmpDiv.innerHTML = str;
           return tmpDiv ;
   }

   renderBtn();

这里写图片描述
我们可以发现虽然我们按钮已经渲染到页面上了,但是外面包裹了一个div,这样带来的不便之处在于我们不好给按钮绑定click事件了,因为createDOMFromString这个函数返回的才是dom对象,我绑定事件需要在它上面绑定,但是它除了我们想要的按钮外还加了一个div。然后还有就是如果我们想渲染行内元素呢?比如span这样的,但是它如果外面包裹了一个div,那么我们得到的就会是一个块级元素,与我们预期不符。

所以针对上述问题,我们可以用firstElementChild来解决,修改代码后的代码为:

function createDOMFromString(str){
        var tempDiv=document.createElement('div');
        tempDiv.innerHTML=str;
        return tempDiv.firstElementChild || null;
}

这样一改,就只会渲染出我们需要的按钮了,不会在外面包裹div;
这里写图片描述
看清楚思路了么?先生成带div的DOM对象,然后利用firstElementChild再把我们需要的对象取出来即可;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值