暂存
/** * Created by wanghonghao on 2022/09/29 */
import Vue from 'vue'
let tdAttrs = { style: { border: '1px solid #000', padding: '5px 30px', 'text-align': 'center', 'font-weight': 'normal' }}
let tableAttrs = { style: { 'border-collapse': 'collapse', margin: '0 auto' }}
function render(examList) {
let table = Vue.component('subject-table', {
render: function (h) {
return h('table', tableAttrs, [
h('thead', tableAttrs, [h('tr', {}, [h('th', tdAttrs, '日期'), h('th', tdAttrs, '时间'), h('th', tdAttrs, '科目')])]),
h(
'tbody',
{},
examList.map(item => h('tr', {}, [h('td', tdAttrs, item.date), h('td', tdAttrs, item.time), h('td', tdAttrs, item.subject)]))
)
])
}
})
let instance = Vue.extend(table)
// 插入子元素进行挂载 避免直接挂载到占位符所包含的<td>
let div = document.createElement('div')
div.setAttribute('id', 'table-div')
let td = document.querySelector('#subject-table')
td.innerText = ''
td.appendChild(div)
new instance().$mount('#table-div')
}
function append(examList) {
// 获取#subject 、#date、#time所在td
let el = document.querySelector('#subject') ?? document.querySelector('#date') ?? document.querySelector('#time')
if (el === null) {
return false
}
// 获取td节点数组 用于插入排序
let order = el.parentElement.childNodes
examList.forEach((item, index) => {
// 拼接html字符串
let str = ''
order.forEach((_item, _index) => {
str += '<td>' + item[_item.id] + '</td>'
})
// html字符串生成dom
const parser = new DOMParser()
// 向table标签中插入节点表格元素(tr、td)时必须使用<table></table>标签包裹,否则parseFromString方法会将tr和td标签自动删除
let node = parser.parseFromString('<table><tr>' + str + '</tr></table>', 'text/html')
// parseFromString转换的是document对象,无法append()直接进行插入,获取内部节点后再插入
el.parentElement.after(node.getElementsByTagName('tr')[0])
})
// 删除占位符所在行
el.parentElement.replaceWith('')
}
function renderTable(examList) {
let el = document.querySelector('#subject-table')
if (el === null) {
append(examList)
} else {
render(examList)
}
}
export default renderTable
作者:whh666
出处:https://www.cnblogs.com/whh666/p/17336894.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构