我正在尝试在 ClojureScript 中创建新元素,但它似乎不起作用。我将首先展示我在此处找到的示例。
(let [dom6238 (.createElement js/document "a")]
(.setAttribute dom6238 "href" "http://somelink")
(set! (.-innerText dom6238) "Text")
dom6238)
他们说转换为:
var dom54535 = document.createElement("a");
dom54535.setAttribute("href", "http://somelink.com");
dom54535.innerText = "Hello there";
return dom54535
如果我没记错的话,这应该会产生一个 HTML 片段,如下所示:
[:a.anchor.silly {:href "http://somelink.com"} "Text"]
我的 .cljs 文件中有这个:
(defn create-button []
(let [a (.createElement js/document "a")]
(.setAttribute a "href" "http://somelink")
(set! (.-innerText a) "Text")
a))
(defn init []
(let [a (.getElementById js/document "write-action")
b (.getElementById js/document "button-field")]
(set! (.-innerHTML a)
"field a")
(set! (.-innerHTML b)
(create-button))))
这只是产生(按钮字段在 HTML 中的 write-action 上方):
http://somelink/
field a
所以没有锚标签,只有文本。
我试图做的是创建一个按钮,所以我有这个代码:
(defn create-button []
(let [new-button (.createElement js/document "input")]
(set! (.-type new-button)
"button")
(set! (.-innerHTML new-button)
"I'm a button")
new-button))
生成此输出:
[object HTMLInputElement]
field a
所以,我玩了一下并删除了返回值:
(defn create-button []
(let [new-button (.createElement js/document "input")]
(set! (.-type new-button)
"button")
(set! (.-innerHTML new-button)
"I'm a button")))
这创造了:
I'm a button
field a
再一次,我只有文字。
我必须完整:
(defn create-button []
(let [new-button (.createElement js/document "input")]
(set! (.-type new-button)
"button")))
仅返回文本:
button
field a
和这个:
(defn create-button []
(let [new-button (.createElement js/document "input")]
(set! (.-type new-button)
"button")
new-button))
产生这个:
[object HTMLInputElement]
field a
我在这里完全迷失了,我到处寻找任何解决方案,但似乎没有任何东西可以回答这个问题。我已经尝试将新的 set 属性包装在 (do) 中,也尝试过没有 (set!) 的版本,但没有任何东西可以产生所需的结果。
问:如何使用 ClojureScript 创建可以单击的按钮?
如果有人知道,奖金 Q:为什么该站点的示例仅返回第一项的结果而不是 innerText 而我的示例仅返回第二个(设置!)函数的文本结果?