当我将参数传递给onclick函数时,我在该参数周围有空格,为什么以及如何删除它们?
t, _ := template.New("").Parse(`<div onclick="test({{.}})">{{.}}</div>`)
t.Execute(os.Stdout, 1)
结果:
<div onclick="test( 1 )">1</div>
编辑:
由Dave帮助更新,从模板我们可以做这样的事情:
t, _ := template.New("").Funcs(template.FuncMap{
"test": func(i interface{}) template.JS {
switch i.(type) {
case int:
s := strconv.Itoa(i.(int))
return template.JS(s)
// other types
default:
panic("bad type")
}
},
}).Parse(`<div onclick="test({{test .}})">{{.}}</div>`)
t.Execute(os.Stdout, 1)
这是Golang做的一些事情,以确保恶意JS不会在您的模板中结束。如果您指定传入的内容对于javascript是安全的,那么它将正常工作。
键入JS
使用此类型会带来安全风险:封装内容应来自可信来源,因为它将逐字包含在模板输出中。
https://play.golang.org/p/TUOECg1YDtl
t.Execute(os.Stdout, template.JS("1"))
结果:
<div onclick="test(1)">1</div>