3 Star 54 Fork 14

Yaohaixiao / dom.js

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
createElement.js 1.64 KB
一键复制 编辑 原始数据 按行查看 历史
import isObject from './utils/types/isObject'
import isString from './utils/types/isString'
import isArray from './utils/types/isArray'
import isDOM from './isDOM'
import text from './text'
import setAttributes from './setAttributes'
/**
* 创建 DOM 节点,并添加属性和子节点
* ========================================================================
* @method createElement
* @param {String} tagName - 标签名称
* @param {Object|Array|HTMLElement|DocumentFragment|String} [attrs] - 属性对象或者子节点
* @param {Array|HTMLElement|DocumentFragment|String} [children] - 子节点数组
* @returns {HTMLElement|null}
*/
const createElement = (tagName, attrs, children) => {
const $fragment = document.createDocumentFragment()
if (!tagName) {
return null
}
const $el = document.createElement(tagName)
const isValidChild = (child) => {
return isDOM(child) || isString(child)
}
const append = (child) => {
let $child
if (!isValidChild(child)) {
return false
}
if (isDOM(child)) {
$child = child
} else {
$child = text(child)
}
$fragment.appendChild($child)
}
if (isString(attrs)) {
append(text(attrs))
} else if (isDOM(attrs)) {
append(attrs)
} else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {
attrs.forEach((child) => {
append(child)
})
} else if (isObject(attrs) && !isDOM(attrs)) {
setAttributes($el, attrs)
}
if (isArray(children)) {
children.forEach((child) => {
append(child)
})
} else {
append(children)
}
$el.appendChild($fragment)
return $el
}
export default createElement
JavaScript
1
https://gitee.com/yaohaixiao/dom.js.git
git@gitee.com:yaohaixiao/dom.js.git
yaohaixiao
dom.js
dom.js
main

搜索帮助

53164aa7 5694891 3bd8fe86 5694891