У меня странная проблема с частью Clojurescript в моем приложении. Я вытащил все необходимые части в небольшое приложение Leiningen Reagent. Вот соответствующий Иккинг:
(defn current-page []
(fn []
(let [page (:current-page (session/get :route))]
[:div
[:table {:width "100%"}
[:tbody
[:tr {:class "row"}
[:td "A"] [:td "B"] [:td "C"]]
[:tr {:class "row"}
[:td "A"] [:td "B"] [:td "C"]]
[:tr {:class "row"}
[:td "A"] [:td "B"] [:td "C"]]
[:tr {:class "row"}
[:td "A"] [:td "B"] [:td "C"]]
[:tr {:class "row"}
[:td "A"] [:td "B"] [:td "C"]]
[:tr {:class "row"}
[:td "A"] [:td "B"] [:td "C"]]
[:tr {:class "row"}
[:td "A"] [:td "B"] [:td "C"]]]]
[:div {:onClick #(unselect-all-rows)} "Unselect All Rows..."]
[:div {:onClick #(select-all-rows)} "Select All Rows..."] ])))
Это просто HTML таблица. Вот функции select и unselect:
(defn unselect-all-rows []
(prn "Unselecting all.")
(let [selected-rows (.getElementsByClassName js/document "row-selected")]
(prn (str "Rows selected: " (.-length selected-rows)))
(doall (map #(.remove (.-classList %) "row-selected") (array-seq selected-rows)))))
(defn select-all-rows []
(prn "Selecting all.")
(let [selectable-rows (.getElementsByClassName js/document "row")]
(doall (map #(.add (.-classList %) "row-selected") (array-seq selectable-rows)))))
Функция select-all-rows работает должным образом, ко всем строкам применяется класс «выбрано строкой», а CSS выделяет строки:
![enter image description here](https://i.stack.imgur.com/61kdz.png)
But when I execute the unselect-all-rows function I only get SOME of the rows unselected:
![enter image description here](https://i.stack.imgur.com/CEOZl.png)
If I click 2 more times then all the rows end up unselected. If I look at the console the number of rows being selected is what I expect, 7 in the first case, but it only seems to perform the remove operation on alternating rows:
введите описание изображения здесь
Что мне здесь не хватает?