我一直关注Scala.js上的basic tutorial。为了将<p>
标记附加到我的HTML页面的主体,本教程定义了一个函数appendPar,它将包含文本的段落附加到另一个节点。
def appendPar(targetNode: dom.Node, text: String): Unit = {
val parNode = document.createElement("p")
val textNode = document.createTextNode(text)
parNode.appendChild(textNode)
targetNode.appendChild(parNode)
}
在TutorialApp的main函数内调用此函数,以将<p>Hello world</p>
附加到文档正文。我尝试的时候工作正常。
但是,当我尝试用main中的一行替换上面的代码时,Hello world
被附加到正文,但没有封装在<p>...</p>
中。
document.body appendChild (document.createElement("p") appendChild
document.createTextNode("Hello world"))
据我所知,我的单行相当于appendPar(document.body, "Hello world")
。
答案 0 :(得分:2)
我并不是真的推荐单行风格 - 它简洁,但也令人困惑(混合功能和副作用风格),以及你的bug即将到来的地方从
最终,你的内部块返回新创建的TextNode,以便将document.body appendChild
的参数用作什么。 TextNode 最初 p
的孩子这一事实无关紧要 - 然后在document.body
下获得了重新定位。
换句话说,事件的顺序是:
p
元素p
document.body
最后一步改变它的位置......