Action Control 沒有控制項 ID 系統。你每次都在描述「現在這份 DOM 裡的哪一個節點」。指錯了,指令仍會成功執行,只是執行在別處。這一章把六種定位,和 C# 裡的兩種寫法,放在同一棵樹上。

一棵拿來指的樹

後面的例子都指這棵樹。索引從 0 開始;負索引從尾端數, 是最後一個。

六種寫法

README 規定,動作碼之後、等號之前,用符號決定定位種類。

@llY@ 種類 & 符號 & 說明
id & 無,直接接在動作碼後 & svcity=taipei 會改 的值。id 在一頁裡應唯一,所以沒有索引。
name & 再加索引 & sd(send)=1 停用第一個 name 為 的元素。第三個要寫 (send)2。
標籤 & 再加索引 & bc<form>=violet 與 bc<form>0=violet 相同。第二個表單是 <form>1。
class & 再加索引 & ta\{my-textbox\}1=right 作用在 class 含該名稱的第二個元素。
query & 開頭 & 一個節點。等號若出現在查詢裡,要寫成 \$[eq];。
query all & 開頭 & 同一條指令套到所有命中的節點。

官方教學用 產生這些字串,也允許你直接傳字串。兩邊是同一條指令:

form.AddTag(InputPlace.Tag("form"), "h3");
form.AddTag("<form>", "h3");

form.AddTag("<form>1", "h3");

form.DeleteOptionTag(InputPlace.Id("city"), "taipei");
form.DeleteOptionTag("city", "taipei");

form.IncreaseValue(InputPlace.Name("hdn_Count"), 1);
form.IncreaseValue("(hdn_Count)", 1);
form.IncreaseValue("(hdn_Count)2", 1);

的第二個參數可以是索引。教學在檔案上傳範例裡用 指到剛剛加上去的最後一個 。這比再寫一次標籤名安全,因為頁面上可能已經有別的 。

路徑,不只是一個節點

定位可以串起來。README 的例子:

at<ul>|{my-class}1|<li>2=My text string

讀的方向是由外往內:class 為 的元素,裡面的第一個 (索引 0,所以 後面沒寫數字),再進去的第三個 。 是 Add Text,所以文字加在那個 裡。

也可以先找節點再往上爬。斜線表示父節點,多寫一條就再上一層:

bc<p>4/=violet

這一行把第五個 的父元素背景設成紫色。 不能用在這種巢狀寫法裡。

指令是對「執行到這一行時」的 DOM 說話。 執行完,下一個 才看得到新的 。若你在加標籤之前就 到 ,而頁面上又沒有別的 ,那一行沒有目標。

一組會踩到的情況

索引是文件順序,不是視覺順序。 的節點仍然佔一個索引。用標籤名定位之前,先在開發者工具裡用同樣的選擇器數一次。

id 定位中間沒有括號。 sd(send)=1 找的是 name。sdsend=1 找的是 id。多一對括號,目標就換了一種屬性。

改 id 之後,舊 id 失效。 README 特別寫了這條:後面的行不能再使用改掉之前的 id。要連續編輯同一個新節點時,用標籤加負索引,或先設好新 id 再用新 id。

query 裡的等號。 CSS 屬性選擇器常有 。它必須寫成 \$[eq];,否則會被看成指令的等號。

在歡迎頁的控制器裡,把 的目標從 改成 。再在版面裡故意放一個空的 。兩種寫法的歡迎句會落在不同節點。把兩次回應的 INI 存下來,對照索引。