我试图在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中的写操作上方):
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点击的按钮?
如果有人知道:为什么站点中的示例只返回第一项的结果而不返回innerText,而我的示例只返回第二项的文本结果(set!)功能?
发布于 2013-04-20 07:52:05
您正在将DOM元素对象分配给另一个元素的innerHTML
属性,该属性显然无法工作。您需要在DOM元素上使用appendChild
方法将一个子元素插入其中。
(let [div (.createElement js/document "DIV")]
(.appendChild div (create-button)))
https://stackoverflow.com/questions/16121687
复制