You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClojureScript中如何通过映射一次性设置JS对象的多个属性?

在ClojureScript中一次性设置DOM元素的多个属性

你原来的写法行不通,因为set! img {:src ...}是把整个映射直接赋值给img变量,而不是修改DOM元素的属性——DOM元素是JavaScript对象,得逐个操作它的属性。

要实现一次性设置多个属性,最简单的方式是自己写个辅助函数,遍历属性映射来逐个设置:

(defn set-dom-attrs! [elem attrs]
  (doseq [[attr-key value] attrs]
    (js/Reflect.set elem (name attr-key) value)))

然后这样使用:

(let [img (.createElement js/document "img")]
  (set-dom-attrs! img {:src "bunny-512.png" :height 64 :width 64})
  ; 后续处理img的逻辑
  )

如果不想单独定义函数,也可以用reduce直接实现:

(let [img (.createElement js/document "img")
      attrs {:src "bunny-512.png" :height 64 :width 64}]
  (reduce (fn [elem [k v]]
            (js/Reflect.set elem (name k) v)
            elem)
          img
          attrs))

要是你的项目用到了Reagent、Rum这类前端库,它们本身就提供了更简洁的DOM属性设置方式;但如果是原生ClojureScript开发,上面的方法就足够解决问题。

内容的提问来源于stack exchange,提问作者Nicolas Modrzyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:45:51