title: 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 为以下对象:

  1. {
  2. "appCodeName": "Mozilla",
  3. "appName": "Netscape",
  4. "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",
  5. "cookieEnabled": true,
  6. "mimeTypes": [],
  7. "onLine": true,
  8. "platform": "MacIntel",
  9. "plugins": [],
  10. "product": "Taro",
  11. "productSub": "20030107",
  12. "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",
  13. "vendor": "Joyent",
  14. "vendorSub": ""
  15. }

requestAnimationFrame

优先使用小程序的 requestAnimationFrame API,如果不存在则进行 polyfill

cancelAnimationFrame

优先使用小程序的 cancelAnimationFrame API,如果不存在则使用 clearTimeout 代替。