The Klipse plugin is a client-side code evaluator.

This means that inside a web page, you are not limited to manipulate data, but you can also manipulate the DOM.

In this article we will show 4 approaches for manipulating the DOM with Clojure using Klipse:

  • reagent
  • the Klipse container
  • the html editor type
  • a custom DOM element

1. Reagent

(require '[reagent.core :as r])
[:div
  "Hello "
  [:strong "World!"]]

For a full explanation about using reagent inside Klipse, have a look at Interactive reagent snippets.

And if you want very cool material about reagent, read this series of reagegent deep dive and How to use a charting library in Reagent.

2. The Klipse container

Each Klipse snippet is associated with a container - a DOM element that is just below the Klipse snippet and accessible with js/klipse-container and js/klipse-container-id:

(set!
 (.-innerHTML js/klipse-container)
 "<div style='color: blue;'> Hello <b>Container</b>!</div>")
(set!
  (.-innerHTML (js/document.getElementById js/klipse-container-id))
  "<div style='color: red;'> Hello <b>Container Id</b>!</div>")

3. Html editor type

You can also have a Klipse snippet with data-editor-type="html": the evaluation of the snippet will be the innerHTML of the result box.


"Hello <strong>HTML editor</strong>"

4. A custom DOM element

Another thing you can do is to add a DOM element to you page (a div a canvas or anything you want) and to manipulate it with your klipse snippet.

In this page we have inserted a <div id="my-custom-container"> just above the Klipse snippet.

(set!
  (.-innerHTML (js/document.getElementById "my-custom-container"))
  "<div style='color: green;'> Hello <b>Custom Container</b>!</div>")

There are a couple of blog posts with lots of creative stuff using this approach: