all files / vtree/ makeTbody.js

100% Statements 25/25
75% Branches 12/16
100% Functions 1/1
100% Lines 25/25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46                                         
//如果直接将tr元素写table下面,那么浏览器将将它们(相邻的那几个),放到一个动态创建的tbody底下
export function makeTbody(nodes) {
    var tbody, needAddTbody = false,
        count = 0,
        start = 0,
        n = nodes.length
    for (var i = 0; i < n; i++) {
        var node = nodes[i]
        if (!tbody) {
            Eif (node.nodeName === 'tr') {
                //收集tr及tr两旁的注释节点
                tbody = {
                    nodeName: 'tbody',
                    props: {},
                    children: []
                }
                tbody.children.push(node)
                needAddTbody = true
                Eif (start === 0)
                    start = i
                nodes[i] = tbody
            }
        } else {
            if (node.nodeName !== 'tr' && node.children) {
                tbody = false
            } else {
                tbody.children.push(node)
                count++
                nodes[i] = 0
            }
        }
    }
 
    Eif (needAddTbody) {
        for (i = start; i < n; i++) {
            if (nodes[i] === 0) {
                nodes.splice(i, 1)
                i--
                count--
                Eif (count === 0) {
                    break
                }
            }
        }
    }
}