wangeditor
Version:
wangEditor - 轻量级 web 富文本编辑器,配置方便,使用简单,开源免费
69 lines (59 loc) • 1.84 kB
text/typescript
/**
* @description 获取子元素的 JSON 格式数据
* @author wangfupeng
*/
import { replaceHtmlSymbol } from '../utils/util'
import $, { DomElement } from '../utils/dom-core'
type AttrType = {
name: string
value: string
}
export type NodeType = {
tag: string
attrs: AttrType[]
children: NodeListType
}
export type NodeListType = Array<string | NodeType>
/**
* 获取子元素的 JSON 格式数据
* @param $elem DOM 节点
*/
function getChildrenJSON($elem: DomElement): NodeListType {
const result: NodeListType = [] // 存储结果
const $children = $elem.childNodes() || [] // 注意 childNodes() 可以获取文本节点
$children.forEach((curElem: HTMLElement) => {
let elemResult
const nodeType = curElem.nodeType
// 文本节点
if (nodeType === 3) {
elemResult = curElem.textContent || ''
elemResult = replaceHtmlSymbol(elemResult)
}
// 普通 DOM 节点
if (nodeType === 1) {
elemResult = {}
elemResult = elemResult as NodeType
// tag
elemResult.tag = curElem.nodeName.toLowerCase()
// attr
const attrData = []
const attrList = curElem.attributes
const attrListLength = attrList.length || 0
for (let i = 0; i < attrListLength; i++) {
const attr = attrList[i]
attrData.push({
name: attr.name,
value: attr.value,
})
}
elemResult.attrs = attrData
// children(递归)
elemResult.children = getChildrenJSON($(curElem))
}
if (elemResult) {
result.push(elemResult)
}
})
return result
}
export default getChildrenJSON