15

次のようなHTMLスニペットがあります。

<div id="root">
    <div id="A" attrib_2="bar"></div>
    <div id="B" attrib_2="baz">
        <div id="H" attrib_1="gnu">
            <p>
                <div id="F" attrib_2="baz"></div>
            </p>
        </div>
    </div>
    <div id="C" attrib_2="owl"></div>
    <div id="D" attrib_2="uhu"></div>
    <div id="E" attrib_2="boom"></div>
</div>

ここで、attrib_1が設定されているノードの子孫であるものを除いて、attrib_2(* [attrb_2])を持つすべてのスニペットを選択したいと思います。<p>(この例のように)任意のタグを使用して、より多くのネストレベルを設定できます。Enlive(http://enlive.cgrand.net/)を使用して、私はすでに次のようなことを試しました。

(select snippet [(but (attr? :attrib_1)) (attr? :attrib_2)])

ただし、否定はタグ(but (attr? :attrib_1))とも一致するため、これは機能しません。<p>与えられたセレクター述語(http://enlive.cgrand.net/syntax.html)でこれを表現する方法はありますか、それとも自分で作成する必要がありますか?

前もって感謝します

-ヨッヘン

4

3 に答える 3

4

独自のセレクターを作成する必要があります。

(def parents 
  (zip-pred (fn [loc pred]
              (some pred (take-while identity (iterate zip/up loc))))))

(未テスト)

その後

(select snippet [[(attr? :attrib_2) (but (parents (attr? :attrib_1))]])

動作するはずです。

于 2011-10-07T11:00:47.663 に答える
1
#root #a attrib_2{}
#root #b attrib_2{}
#root #c attrib_2{}
#root #d attrib_2{}
#root #e attrib_2{}

これにより、ルート div 内の css 内のすべての attrib2 スニペットが選択されます。

于 2011-08-29T00:01:33.740 に答える
1

議論のために、これを行うことはできませんでした:

<div id="whatever" class="attrib_2 bar"></div>

意味的には、この方が良いように思えますが、使用しているシステムや最終的な目的がわかりません。ただし、クラスを使用する場合、CSS は非常に単純になります。

div.attrib.bar {
    something:else;
}
于 2011-10-13T17:42:12.800 に答える