ClojureScript: использование Jayq для получения значения атрибута

Мне было интересно, знает ли кто-нибудь, как вы можете получить значение атрибута из HTML веб-страницы, используя jayq в ClojureScript.

Я сделал это до сих пор:

(ns jquerytest.core)

(def jquery (js* "$"))
 (jquery
     (fn []
         (-> (jquery "#w3s")
             (.attr "href" "http://www.duckduckgo.com")
         )
     )
 )

Этот код делает то, что должен, и изменяет значение "href" в атрибуте "w3s" с http://www.google.com на http://www.duckduckgo.com.

Из того, что я знаю о jQuery (в котором был обернут jayq), получить значение атрибута так же просто, как:

var hyref = $(this).attr('href');
alert(hyref);

Итак, я пытался смоделировать подобное поведение в своем clojurescript (но просто писал на экран и т. д.). Вот набор из двух примеров попыток:

(1)

(defn attr-link [] 
     (doto (jquery ".link") 
           (.html) 
           (println)
     )
)

Этот метод был предназначен только для того, чтобы увидеть, могу ли я вообще получить что-либо из атрибута «ссылка», мне удалось вывести это на экран:

function jquerytest$core$y(){ var G__6988 = jquerytest.core.jquery.call(null,".link"); G__6988.html(); cljs.core.println.call(null,G__6988); return G__6988; } 

(2)

(defn getVal [] 
     (-> (jquery "#w3s")
         (.attr "href")
     )
)

Я надеялся, что кто-то, возможно, захочет указать на мою собственную глупость, объяснив мне, как на самом деле следует это делать.


person Shells Be    schedule 23.04.2016    source источник


Ответы (1)


Итак, после некоторого времени поиска мне удалось самому наткнуться на ответ. Используя библиотеку Dommy (dom в моем коде), мне удалось получить значение href тега "a". .

  (ns hello-world.core
  (:require [clojure.browser.repl :as repl] [dommy.core :as dom])
      (defn get-link-value 
        []
        (println (-> (dom/sel1 "#w3s")
          (dom/attr :href)
        )   
      )

Это далеко не лучшее решение проблемы, но это единственное, что мне удалось найти на данный момент.

person Shells Be    schedule 05.05.2016