Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Scala.js中,如何切换类中元素的可见性?_Javascript_Scala.js - Fatal编程技术网

Javascript 在Scala.js中,如何切换类中元素的可见性?

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 =

在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 = "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都需要转换为该类型,才能使用该类型。