Comments (5)
I finally got down to figuring this out:
(defn hickory-remove [selector-fn hickory-tree]
(loop [zip (hickory.zip/hickory-zip hickory-tree)
next (hs/select-next-loc selector-fn zip)]
(if next
(let [new-zip (zip/remove next)]
(recur new-zip (hs/select-next-loc selector-fn new-zip)))
(zip/root zip))))
Usage:
(hickory-remove (hs/node-type :comment) tt)
I think it's a useful utility, but feel free to close if you think it's not worth including into the package.
from hickory.
An actual example in the docs (such as this one, or even simpler) of combining selectors and zippers to modify some HTML would be helpful!
from hickory.
here an even more generic function:
(defn hickory-update [selector-fn hickory-tree zip-fn]
(loop [zip (hickory.zip/hickory-zip hickory-tree)
next (hickory.select/select-next-loc selector-fn zip)]
(if next
(let [new-zip (zip-fn next)]
(recur new-zip (hickory.select/select-next-loc selector-fn new-zip)))
(zip/root zip))))
; example: replace h3 by h2 tag
(defn replace-h3-h2 [t]
(hickory-update
(hickory.select/tag :h3)
t
#(zip/edit
%
(fn [n]
(assoc n :tag :h2)))))
from hickory.
Hickory lets you make any modification you want to the tree using Clojure's Zipper interface, just use select-locs or select-next-loc instead of select, and you'll be returned a Clojure zipper that you can do modifications on.
from hickory.
and you'll be returned a Clojure zipper that you can do modifications on.
Thanks. I will try it out and will post an example here for the reference.
from hickory.
Related Issues (20)
- Close pull requests that won't be merged HOT 5
- Parsing throws on long markdown files HOT 1
- very odd interactive issue HOT 1
- event handlers HOT 2
- Unexpected conversion result HOT 3
- StackOverflowError when parsing many unclosed tags in series HOT 8
- Hickory does not correctly parse <noscript> tags in <head> HOT 1
- License Issue with codox - GPLv3 vs EPL HOT 3
- (as-hiccup (parse-fragment ...)) doesn't work in clojurescript with shadow-cljs HOT 2
- Node.js support revisited HOT 2
- :viewBox property in svg not correctly parsed to hiccup. HOT 2
- svg tag viewBox becomes viewbox HOT 1
- Invalid output by as-hiccup HOT 2
- Link to API documentation are broken - 404 not found
- Any interest in CSS-style selectors? HOT 3
- Graal doesn't compile for 0.7.2+ HOT 3
- After bundling hickory in an uberjar, it throws and exception when running that .jar file HOT 2
- Select all between two things? HOT 1
- `find-in-text` selector does not seem to work when it's the last argument of a `child` selector
- Use of aget breaks under advanced compilation HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hickory.