Taro DOM Reference
小程序环境下,Taro 模拟实现的 DOM、BOM API 概览。
相关代码位于 @tarojs/runtime 包中。
DOM
TaroEventTarget
| 属性或方法 | 说明 |
|---|---|
| addEventListener | 绑定事件 |
| removeEventListener | 解绑事件 |
TaroNode
TaroEventTarget <- TaroNode
| 属性或方法 | 说明 |
|---|---|
| nodeType | |
| nodeName | |
| parentNode | |
| childNodes | |
| nextSibling | |
| previousSibling | |
| parentElement | |
| firstChild | |
| lastChild | |
| textContent | setter |
| insertBefore | |
| appendChild | |
| replaceChild | |
| removeChild | |
| remove | |
| hasChildNodes | |
| ownerDocument | 只读,返回模拟的 document 对象 |
可选属性/方法
以下属性/方法不是每个 Web 框架、每个应用都需要使用的。因此 Taro v3.4 把这类 DOM APIs 做成可插拔式,让开发者可以选择在最终的编译结果里只存在哪些 DOM APIs。
tip
如果没有使用 React 的 dangerouslySetInnerHTML 或 Vue2 的 v-html 去渲染 HTML 字符串,可以关闭对 innerHTML 的支持,可以节省 9k 的空间。
但 Vue3 必须开启,因为它使用了 insertAdjacentHTML。
| 属性或方法 | 默认状态 | 配置项 | 说明 |
|---|---|---|---|
| innerHTML | 开启 | enableInnerHTML | 目前只实现了 setter(主要用于支持 React dangerouslySetInnerHTML、Vue v-html)getter 只会返回空字符串 |
| insertAdjacentHTML | 开启(Vue3) | enableAdjacentHTML | |
| cloneNode | 开启(Vue3) | enableCloneNode | |
| contains | 关闭 | enableContains |
TaroText
TaroEventTarget <- TaroNode <- TaroText
| 属性或方法 | 说明 |
|---|---|
| textContent | |
| nodeValue |
TaroElement
TaroEventTarget <- TaroNode <- TaroElement
| 属性或方法 | 说明 |
|---|---|
| id | |
| tagName | |
| props | |
| style | |
| dataset | |
| className | |
| cssText | |
| classList | |
| children | |
| attributes | |
| textContent | |
| hasAttribute | |
| hasAttributes | |
| focus | |
| blur | |
| setAttribute | |
| removeAttribute | |
| getAttribute | |
| getElementsByTagName | |
| getElementsByClassName | |
| dispatchEvent |
可选属性/方法
| 属性或方法 | 默认状态 | 配置项 | 说明 |
|---|---|---|---|
| content | 开启(Vue3) | enableTemplateContent | |
| getBoundingClientRect | 关闭 | enableSizeAPIs | 受限于小程序,此 API 是异步函数 |
RootElement
TaroEventTarget <- TaroNode <- TaroElement <- RootElement
非 Web 标准 API。是链接 Taro DOM 更新和小程序 setData 的核心实现。
在这里会调用小程序的 setData API,把 Taro DOM 的序列化数据传递到小程序渲染层。
FormElement
TaroEventTarget <- TaroNode <- TaroElement <- FormElement
| 属性或方法 | 说明 |
|---|---|
| value | 返回或设置当前控件的值 |
SVGElement
TaroEventTarget <- TaroNode <- TaroElement <- SVGElement
只是实现了继承关系,没有实现属性与方法。
BOM
window
Taro 模拟实现了基于浏览器标准 window 对象,它主要实现了用于支持 React、Vue 等框架运行的必备 API。
此外,Taro 会为 window 对象赋值小程序的 global 对象上的全部属性。
| 属性或方法 | 说明 |
|---|---|
| navigator | 模拟的 navigator 对象 |
| document | 模拟的 document 对象 |
| requestAnimationFrame | 模拟的 requestAnimationFrame API |
| cancelAnimationFrame | 模拟的 cancelAnimationFrame API |
| getComputedStyle | 只能用于返回元素的 style 值,做不到真正去计算 css 后的样式 |
| addEventListener | 空函数 |
| removeEventListener | 空函数 |
document
TaroEventTarget <- TaroNode <- TaroElement <- document
| 属性或方法 | 说明 |
|---|---|
| createElement | 返回 TaroElement |
| createElementNS | 没有正真去实现,等同于 document.createElement,返回 TaroElement |
| createTextNode | 返回 TaroText |
| createComment | 返回 TaroText |
| getElementById | 返回 TaroElement |
| querySelector | 目前只能根据 id 寻找元素,等同于 document.getElementById |
| querySelectorAll | 没有正真去实现,返回 [] |
| defaultView | 返回 window |
navigator
navigator 为以下对象:
{
"appCodeName": "Mozilla",
"appName": "Netscape",
"appVersion": "5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/534.36 (KHTML, like Gecko) NodeJS/v4.1.0 Chrome/76.0.3809.132 Safari/534.36",
"cookieEnabled": true,
"mimeTypes": [],
"onLine": true,
"platform": "MacIntel",
"plugins": [],
"product": "Taro",
"productSub": "20030107",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/534.36 (KHTML, like Gecko) NodeJS/v4.1.0 Chrome/76.0.3809.132 Safari/534.36",
"vendor": "Joyent",
"vendorSub": ""
}
requestAnimationFrame
优先使用小程序的 requestAnimationFrame API,如果不存在则进行 polyfill。
cancelAnimationFrame
优先使用小程序的 cancelAnimationFrame API,如果不存在则使用 clearTimeout 代替。