JS40 虚拟DOM

该文章展示了一段JavaScript代码,用于将包含tag、props、children和text的对象转换成实际的DOM元素。代码首先定义了一个_createElm函数,通过递归处理对象的children属性来创建DOM树,并使用_setAtrr函数设置元素的属性。
摘要由CSDN通过智能技术生成

请补全JavaScript代码,要求将对象参数转换为真实的DOM结构并返回。
注意:

  1. tag为标签名称、props为属性、children为子元素、text为标签内容
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
    </head>
    <body>

        <script>
            var vnode = {
                tag: 'ul',
                props: {
                    class: 'list'
                },
                text: '',
                children: [
                    {
                        tag: "li",
                        props: {
                            class: "item"
                        },
                        text: '',
                        children: [
                            {
                                tag: undefined,
                                props: {},
                                text: '牛客网',
                                children: []
                            }
                        ]
                    },
                    {
                        tag: "li",
                        props: {},
                        text: '',
                        children: [
                            {
                                tag: undefined,
                                props: {},
                                text: 'nowcoder',
                                children: []
                            }
                        ]
                    }
                ]
            }
            const _createElm = vnode => {
                //把属性解构出来
                let {tag,props,children,text} =vnode
                if(typeof tag =='string'){
                    vnode.el=document.createElement(tag)
                //设置标签的样式
                    _setAtrr(vnode.el,props)
                //在节点中再添加文字
                    vnode.el.appendChild(document.createTextNode(text))
                //遍历孩子
                    children.forEach(child=>{
                //递归遍历元素
                        vnode.el.appendChild(_createElm(child))
                    })
                }else{
                //如果没有指明标签
                    vnode.el=document.createTextNode(text)
                }
                return vnode.el
            }

                //遍历属性,然后设置属性
            const _setAtrr =(elem,attrs)=>{
                for(key in attrs){
                    elem.setAtrribute(key,attrs[key])
                }
            }
        </script>
    </body>
</html>

创建每个标签,然后设置属性,对于children进行遍历再进行相同的操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值