diff --git a/test/index.spec.js b/test/index.spec.js index 94eb243..8e9ddb6 100644 --- a/test/index.spec.js +++ b/test/index.spec.js @@ -1,4 +1,4 @@ -const { elementOpen, text, elementEnd, currentInfo } = require('../vdom/vnodeBack.js'); +const { elementOpen, text, elementEnd, currentInfo } = require('../vdom/vnode.js'); describe('idom', () => { test('校验idom结构', async () => { diff --git a/vdom/vnode.js b/vdom/vnode.js index 4839adb..092abf4 100644 --- a/vdom/vnode.js +++ b/vdom/vnode.js @@ -5,23 +5,56 @@ */ var currentInfo = { - currentNode: null, - currentParent: null -} + currentNode: null, + currentParent: null, +}; function elementOpen(tagName) { - // TODO + // TODO + const node = { + tagName, + }; + + currentInfo.currentNode = node; + + currentInfo.currentNode.parent = currentInfo.currentParent; + + if (currentInfo.currentNode.parent !== null) { + if (Array.isArray(currentInfo.currentNode.parent.children)) { + currentInfo.currentNode.parent.children.push(currentInfo.currentNode); + } else { + currentInfo.currentNode.parent.children = [currentInfo.currentNode]; + } + } + + currentInfo.currentParent = currentInfo.currentNode; } function text(textContent) { - // TODO + // TODO + if (!currentInfo.currentNode) { + return; + } + currentInfo.currentNode.text = textContent; } function elementEnd(tagName) { - // TODO + // TODO + if (currentInfo.currentNode.tagName !== tagName) { + return; + } + const parent = currentInfo.currentNode.parent; + + delete currentInfo.currentNode.parent; + + if (parent !== null) { + currentInfo.currentNode = parent; + } + + currentInfo.currentParent = parent; } module.exports = { - elementOpen, - text, - elementEnd, - currentInfo -}; \ No newline at end of file + elementOpen, + text, + elementEnd, + currentInfo, +};