Comments (4)
@brweber2 Thanks for the proposal.
Yes, this is possible. I think for this feature we need something more flexible, like a "protocol" for saying that we want to "add" attributes, or change the tag name (type), or "push" a new child into the tree.
Something like:
Floki.transform(html_tree, "span", fn element -> {:add_child, "a text"} end)
# or
Floki.transform(html_tree, "span", fn element -> {:replace_type, "div"} end)
# or
Floki.transform(html_tree, "span", fn element -> {:add_attribute, {"class", "farawell"}} end)
What do you think?
from floki.
@cj do you mean transform the HTML and returning the modified version as string?
If so, this version can't do that. But it's an interesting idea.
Can you show an example of usage?
from floki.
html = """
<div>
<span>hello</span>
</div>
"""
Floki.parse(html)
|> Floki.transform("span", fn element -> {"div", [], ["goodbye"]} end )
#
# <div>
# <div>goodbye</div>
# </div>
#
Rather than just find the elements that match and return them as a list, it would use the original parsed HTML data structure as the accumulator and apply the callback function to replace each match.
The implementation would be very similar to find only it would have an additional argument (the callback function) and the accumulator would be the entire HTML document and not just the list of matches.
Is something like this possible today?
from floki.
Since there was not much discussion here I'm closing this issue.
Please open another issue to keep the discussion if needed. Thanks!
from floki.
Related Issues (20)
- Proposal: Add Floki.Doc HOT 10
- Drop support for Elixir 1.11
- Allow option to parse attributes as maps HOT 9
- Floki is extremely noisy in logs
- Support for :has pseudo selector
- Error after upgrading to 0.35.0 HOT 6
- Buttons in Header Section Lacks Transition!!
- Floki attribute example is ambiguous
- Proposal: optimized find for simple cases HOT 6
- Is it possible to get line/column number of a tag? HOT 4
- Unexpected order using `find` with comma separated selectors in v0.35.3 HOT 2
- nth-child selector not working as expected HOT 8
- Floki.raw_html/2 no longer respects `config :floki, :encode_raw_html, false` HOT 1
- Add functionality to escape values in selectors
- Issue with an archive uploaded to hex HOT 3
- Empty tag attributes are not parsed correctly HOT 4
- issues with fetching floki as dependeny HOT 2
- Document type declaration (DOCTYPE) is not parsed
- Floki.HTMLParser.FastHtml fails to parse <noscript> properly when present in head.
- Floki.find/2 doesn't find ids ending with `?` 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 floki.