创建createElement

let oDiv = {
  tag:'div', 
  props:{
    id:'box'
  }
};
 


let oP = createElement('p',{'class':'list'},['周一']);

//创建一个div标签

let oDiv1 = createElement('div',{
    id:'box',
    class:'wrap',
    style:{
      width:'100px',
      height:'100px',
      background:'red'
    },
  },['2000',oP])

//创建标签方法

function createElement(tag,props,children){
    return {
      tag,
      props:{...props},
      children:[...children]
    }
}



// 把虚拟的dom转成真实的dom,并且把它渲染到页面里面

 

render(oDiv1,document.getElementById('root'));
function render(vTree,root){
  let target = createDom(vTree);
  root.appendChild(target);
  //把虚拟的dom转成真实的dom
  function createDom(vTree){
    let {tag,props,children} = vTree;
    
    //创建节点
    let targetDom = document.createElement(tag);
    //添加属性
    Object.entries(props).forEach(item => {
      let [key,value] = item;
      if(typeof value == 'object'){//[[id,box], [class,list]]
        value = Object.entries(value).map(item1 => item1[0]+':'+item1[1]).join(';')
      }
      targetDom.setAttribute(key,value)
    })
    //添加子节点
    if(children){
      children.forEach(item => {
      let targetText = typeof item == 'string' ? document.createTextNode(item) : createDom(item);
      targetDom.appendChild(targetText)
      })
    }
    return targetDom;
  }
}

 

转载于:https://www.cnblogs.com/wzybnzy/p/11106014.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值