@@ -68,6 +68,25 @@ if (empty) $.fn.empty = empty
68
68
69
69
export default $
70
70
71
+ import { toString } from './util'
72
+
73
+ export const isDocument = ( value : any ) : value is Document => {
74
+ return toString ( value ) === '[object HTMLDocument]'
75
+ }
76
+
77
+ export const isShadowRoot = ( value : any ) : value is ShadowRoot => {
78
+ return toString ( value ) === '[object ShadowRoot]'
79
+ }
80
+
81
+ export const isDataTransfer = ( value : any ) : value is DataTransfer => {
82
+ return toString ( value ) === '[object DataTransfer]'
83
+ }
84
+
85
+ const HTML_ELEMENT_STR_REG_EXP = / \[ o b j e c t H T M L ( [ A - Z ] [ a - z ] * ) * E l e m e n t \] /
86
+ export const isHTMLElememt = ( value : any ) : value is HTMLElement => {
87
+ return HTML_ELEMENT_STR_REG_EXP . test ( toString ( value ) )
88
+ }
89
+
71
90
// ------------------------------- 分割线,以下内容参考 slate-react dom.ts -------------------------------
72
91
73
92
// COMPAT: This is required to prevent TypeScript aliases from doing some very
@@ -109,20 +128,14 @@ export const isDOMElement = (value: any): value is DOMElement => {
109
128
* Check if a value is a DOM node.
110
129
*/
111
130
export const isDOMNode = ( value : any ) : value is DOMNode => {
112
- const window = getDefaultView ( value )
113
- return (
114
- ! ! window &&
115
- // @ts -ignore
116
- value instanceof window . Node
117
- )
131
+ return value != null && typeof value . nodeType === 'number'
118
132
}
119
133
120
134
/**
121
135
* Check if a value is a DOM selection.
122
136
*/
123
137
export const isDOMSelection = ( value : any ) : value is DOMSelection => {
124
- const window = value && value . anchorNode && getDefaultView ( value . anchorNode )
125
- return ! ! window && value instanceof window . Selection
138
+ return toString ( value ) === '[object Selection]'
126
139
}
127
140
128
141
/**
@@ -343,7 +356,7 @@ export function walkTextNodes(
343
356
handler : ( textNode : DOMNode , parent : DOMElement ) => void
344
357
) {
345
358
// void elem 内部的 text 不处理
346
- if ( elem instanceof HTMLElement && elem . dataset . slateVoid === 'true' ) return
359
+ if ( isHTMLElememt ( elem ) && elem . dataset . slateVoid === 'true' ) return
347
360
348
361
for ( let nodes = elem . childNodes , i = nodes . length ; i -- ; ) {
349
362
const node = nodes [ i ]
0 commit comments