-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdocument.go
73 lines (56 loc) · 2.1 KB
/
document.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//go:build js && wasm
package js
import "fmt"
// Appendable 代表物件是可被加到 Body 或 HTMLElement 內。目前有實作的物件有: Element, HTML, Plain, Template.
type Appendable interface {
Wrapper
Ref() Value
}
// -----------------------------------------------------------------------------
// Query 呼叫 Document.querySelector,並回傳 Element。
func Query(selector string) Element {
return elementOf(query(document, selector))
}
// -----------------------------------------------------------------------------
// QueryAll 呼叫 Document.querySelectorAll,並回傳 Elements。
func QueryAll(selector string) Elements {
return ElementsOf(queryAll(document, selector))
}
// -----------------------------------------------------------------------------
// Append 將物件加到 Body 的尾端。
func Append(child Appendable, selector ...string) {
appendNode(at(body, selector...), child)
}
// -----------------------------------------------------------------------------
// Prepend 將物件加到 Body 的前面。
func Prepend(child Appendable, selector ...string) {
//body.Call("prepend", a.Ref())
prependNode(at(body, selector...), child)
}
// -----------------------------------------------------------------------------
// RemoveChild 將 Body 內的物件移除。
//
// x 可以是:
// 1. string: 需遵守 Selector 規則。
// 2. Value: 呼叫 remove 函式,Value 必須是 Javascript Element。
// 3. Wrapper: 呼叫 JSValue() 取得 Value 後,呼叫 remove,因此取得的 Value 物件,必須是 Javascript Element.
func RemoveChild(x any) {
switch v := x.(type) {
case string:
query(document, v).Call("remove")
case Value:
v.Call("remove")
case Wrapper:
v.JSValue().Call("remove")
default:
panic(fmt.Sprintf("unsupport type %T", x))
}
}
// -----------------------------------------------------------------------------
func createElement(tag string) Value {
return document.Call("createElement", tag)
}
// -----------------------------------------------------------------------------
func CreateElement(tag string) Element {
return elementOf(createElement(tag))
}