用js编写一个load方法,收到的参数为dom是一个html的dom对象。 通过isHTML方法(参数为dom)判断dom是否为常规html标签。 如果是常规html标签则调用MakeApp得到一个返回值并赋值给app变量。 如果不是常规html标签则调用MakeApp同时在apps数组中找到一个name属性为dom的名字的对象作为参数填入MakeApp,得到的返回值赋值给app变量。 遍历dom的直接子节点(非孙子节点),将遍历的内容作为参数输入到load方法中得到一个返回值,然后将这个返回值添加到一个数组中。 在结束遍历后将在遍历中得到的数组作为添加到app对象的children属性数组中。 返回app对象
时间: 2024-01-24 08:18:04 浏览: 271
我明白了,您的问题是如何用js编写一个load方法,接收dom参数并根据isHTML方法判断dom是否为常规html标签,然后根据情况调用MakeApp方法,并将返回值添加到app对象的children属性数组中。最后返回app对象。
以下是一个可能的解决方案:
function load(dom) {
if (isHTML(dom)) {
// 如果dom是常规html标签,调用MakeApp方法得到返回值并赋值给app变量
let app = MakeApp(dom.tagName.toLowerCase());
// 遍历dom的直接子节点(非孙子节点),将遍历的内容作为参数输入到load方法中得到一个返回值,然后将这个返回值添加到一个数组中
let children = Array.from(dom.children).map(child => load(child));
// 在结束遍历后将在遍历中得到的数组作为添加到app对象的children属性数组中
app.children = children;
// 返回app对象
return app;
} else {
// 如果dom不是常规html标签,查找对应的app对象
let app = apps.find(app => app.name === dom.getAttribute('name'));
// 如果找到了对应的app对象,调用MakeApp方法并将app对象作为参数传入,得到返回值并赋值给app变量
if (app) {
let appResult = MakeApp(app);
// 遍历dom的直接子节点(非孙子节点),将遍历的内容作为参数输入到load方法中得到一个返回值,然后将这个返回值添加到一个数组中
let children = Array.from(dom.children).map(child => load(child));
// 在结束遍历后将在遍历中得到的数组作为添加到app对象的children属性数组中
appResult.children = children;
// 返回app对象
return appResult;
} else {
// 如果没有找到对应的app对象,返回null
return null;
}
}
}
阅读全文