尝试使用 Canopy 和 F# 在 class 中检索 class

Trying to retrieve a class in a class using Canopy and F#

我正在尝试使用 canopy to use F# to play a game of Tic Tac Toe here。 "board" 看起来像下面的

<div class="game">
<div class="board">
<div class="square top left"><div class="x"></div></div>    <--- take note here
<div class="square top"><div></div></div>
<div class="square top right"><div></div></div>
<div class="square left"><div></div></div>
<div class="square"><div></div></div>
<div class="square right"><div class="o"></div></div>       <--- take note here
<div class="square bottom left"><div></div></div>
<div class="square bottom"><div></div></div>
<div class="square bottom right"><div></div></div>
</div>

当您点击放置 X 或 O 时,它会将 <div> 更改为 <div class="o"> 我正在尝试检索板的状态,但它不起作用,因为说例如我做最简单的事情

let state = elements |> ".square" 

这将 return 9 个元素...但是 return 子 div 是否为 x 不是因为 "x" 不是一个属性一个值。

基本上我的问题是。如何检索某个位置包含 X 或 O。

抱歉好久没看SO了!

这个有点棘手,如果你拥有代码,你可以通过改变它来让你的生活更轻松一些

<div class="square top left">
to  
<div class="square top-left">

如果没有,您可能需要创建 9 个选择器,每个选择器对应板上的每个位置。

类似这样的东西,未经测试:

let topLeft = ".square.top.left"
let topCenter = ".square.top:not(.left,.right)"
let topRight = ".square.top.right"
let middleLeft =".square.left:not(.top,.bottom)"
etc

然后你检查那些方块是否有 X 或 O

let hasX square = 
  let result = someElement <| sprintf "%s .x" square
  match result with
  | None    -> false
  | Some(_) -> true

and one for hasO

那你就可以了

if hasX topLeft then
  //whatever