Javascript 在Scala.js中,如何切换类中元素的可见性?
在Scala.js程序中,我想切换类my img中HTML页面上所有元素的可见性。到目前为止,我得到的是Javascript 在Scala.js中,如何切换类中元素的可见性?,javascript,scala.js,Javascript,Scala.js,在Scala.js程序中,我想切换类my img中HTML页面上所有元素的可见性。到目前为止,我得到的是 import org.scalajs.dom import dom.document val elems: dom.NodeList = document.getElemsByClassName("my-img") for (i <- 0 until elems.length) { val e: dom.Node = elems(i) e.style.display =
import org.scalajs.dom
import dom.document
val elems: dom.NodeList = document.getElemsByClassName("my-img")
for (i <- 0 until elems.length) {
val e: dom.Node = elems(i)
e.style.display = "none" <-- this chokes, says style is not a member of Node
此时,我正在尝试访问节点的样式成员,根据Javascript文档,它应该在那里,但是Scala.js给了我一个错误。注意,这是一个Javascript问题,而不是Scala.js问题本身 有几个答案,这取决于您是否愿意包含jQuery库。这是Javascript世界中有点重但非常常见的库,在Scala.js编程中也经常使用。它不是必需的,但它使这类事情变得相当容易 此库有两种流行的Scala.js facades Scala说明;我写了其中一个。如果您按照该页上的描述将其拉入,则问题变得相当简单:
import org.querki.jquery._
// Fetch all of the nodes. jQuery uses CSS selectors, more or less,
// so this means "everything with class my-img".
val myImgs = $(".my-img")
// Hide all of them. myImgs is a JQuery object -- a wrapper around
// all of those nodes -- so a single call hides all of them:
myImgs.hide()
// Or show them:
myImgs.show()
这是未经测试的,我今天正在与流感作斗争,所以请原谅我的任何错误,但我认为它应该有效…我更新了我的回答。在尝试使用jQuery之前,我想了解Scala.js中的更多基本Javascript问题。哇,这是-嗯,我从来没有见过有人试图这样做,正是因为这样工作太痛苦了。但要解决一些困惑:节点列表的一个大问题是它是XML节点的原始列表,而不是HTML节点。XML节点对样式一无所知。因此,您必须手动执行.asInstanceOf[HtmleElement]来告诉JavaScript您拥有它所不知道的神奇的外部知识。这是因为我们在弱类型环境JS/DOM中使用了强类型语言Scala。JavaScript传统上对这些东西的处理是快速而松散的,并且悄悄地忽略了这样一个事实,即从类型的角度来看,您有时在做一些毫无意义的事情。Scala不允许您这样做-如果您有带外知识,知道类型A的对象实际上是类型B,您必须明确地说出来。结果是.asInstanceOf[]在Scala.js中比在ScalaJVM中更常见-这是您告诉编译器您知道这确实是一种不同的类型,通常是一种比API声明的更精确的类型。因此,每个dom.Nodes都需要转换为该类型,才能使用该类型。