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)
- Include input values in the result of `Floki.text/2` HOT 4
- Floki using the built in parser does not handle the optional closing p tag HOT 5
- html_declaration can be a 2 tuple HOT 1
- Suggestion self_closing_tags HOT 5
- Floki.find doesn't support escaped colons in class names HOT 3
- parse_fragment does not parse whitespace in HTML (or XML) text properly
- traverse_and_update/3 return typespec needs html_tree() HOT 4
- :not pseudo-class attribute selector breaks Floki.find/2 with comma-separated selectors HOT 3
- Unhandled error for Floki.parse_fragment/2 HOT 1
- CDATA inside a title tag is not handled in Mochiweb parser
- Is there a way to replace paragraph tags by newlines in Floki.text()? HOT 1
- 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 5
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.