如何从Go WebAssembly访问DOM元素属性?

Mik*_*lis 4 go webassembly

我正在尝试从https://github.com/golang/go/wiki/WebAssembly扩展“ Hello WebAssembly”示例。如给定的那样,该示例仅将消息打印到控制台。我想添加一些代码syscall/js来替换body元素的内容。

以下尝试无法建立:

package main

import (
    "fmt"

    "syscall/js"
)

func main() {
    fmt.Println("Hello, WebAssembly!") // original example
    // I added
    doc := js.Global().Get("document")
    body := doc.Call("getElementById", "thebody")
    body.innerHTML = "Dynamic Content"
}
Run Code Online (Sandbox Code Playgroud)

当我尝试构建时,$ env GOOS=js GOARCH=wasm go build -o main.wasm 我得到: ./wasm.go:14:6: body.innerHTML undefined (type js.Value has no field or method innerHTML)

考虑一下就不足为奇了,但是我在https://godoc.org/syscall/js的文档中看不到一个示例,该示例解释了如何获取和设置元素属性。

icz*_*cza 5

要获取某个JavaScript对象的任何属性的值,请使用Value.Get()方法(通过调用访问文档对象时,您实际上已经在使用它js.Global().Get("document"))。同样,要设置属性的值,请使用Value.Set()

对于您的情况string,要获取/设置其值的属性名称只是一个Go 值"innerHTML"。要设置的值可以是许多Go值(例如string,整数,浮点数bool,,切片,映射等),该js.ValueOf()函数用于获取js.Value()最终设置的。在您的情况下,您可以简单地使用Go string"Dynamic Content"

doc := js.Global().Get("document")
body := doc.Call("getElementById", "thebody")
body.Set("innerHTML", "Dynamic Content")
Run Code Online (Sandbox Code Playgroud)