0

Enlive を使用して、この html の replace-me スクリプト タグを複製しようとしています。

<!DOCTYPE html>
<html lang="en">
  <head>
[...]
    <script src="/js/libs/less.min.js"></script>
    <script src="replace-me"></script>
  </head>
[...]

質問1)

最後のスクリプト要素の「慣用的な」セレクターが何であるかを理解するのに苦労しています。現在、私は使用しています

(h/select tpl [:head :> [h/last-of-type :script]])

あれは正しいですか?

質問2)

head エンティティ全体を変換するためのこのスニペットがあります。

(h/defsnippet head "templates/base.html" [:head]
  [{:keys [scripts]}]
  [h/root :> [h/last-of-type :script]]
  (h/clone-for [script scripts]
               (h/set-attr :src (:src script))))

これはルート セレクター ステップの正しい使用法ですか? defsnippet のコンテキスト内で、root が [:head] セレクターを参照していると仮定していますが、それは正しいですか?

ありがとう!

4

1 に答える 1

1
  1. これはこの場合に機能しますが、次のことをお勧めしますattr-has

    (h/select tpl [[:script (h/attr-has :src "replace-me")]])
    
    (h/defsnippet head "templates/base.html" [:head]
      [{:keys [scripts]}]
      [h/root :> (h/attr-has :src "replace-me")]
      (h/clone-for [script scripts]
                   (h/set-attr :src (:src script))))
    

    より複雑なケースでは、独自のセレクターを定義できます。ここでは のため不要ですがattr-has、例として:

    (def my-pred (h/pred #(= #{"replace.me"} (h/attr-values % :src))))
    
    (h/defsnippet head "templates/base.html" [:head]
      [{:keys [scripts]}]
      [h/root :> my-pred]
      (clone-for [script scripts]
                 (h/set-attr :src (:src script))))
    
  2. emit*スニペットが目的の結果を生成するかどうかを確認するために使用できます。

    (apply println (h/emit* (head {:scripts [{:src "bar.js"}]})))
    
于 2012-08-18T15:43:14.543 に答える