Please share an example with HTMLRewriter - if element contains text,
for example <a> or <p>
then do something with attributes.
Thanks in advance!
Please share an example with HTMLRewriter - if element contains text,
for example <a> or <p>
then do something with attributes.
Thanks in advance!
The forum is not strictly for custom JavaScript development.
What have you tried so far and why didnt it work?
As example - I need to put a text into attribute
<a href="#">red</a> => <a href="#" data-color="red">red</a>
I separately access a text inside tag using HTMLRewriter.text and element properties using HTMLRewriter.element - but I’ve no idea how to combine them. If it is possible to access text for element - there will be no problem.
Post the code you have tried so far.
I write nothing becasue element(element) can’t access “innertext” property and I’ve no idea how to pass variable from text(text) to element(element) in HTMLRewriter.
Here is my task in non-theoretical task.
I need to delete all elements containing “yastatic” text in text, src of href. Here is code
const yastaticrewriter = new HTMLRewriter()
.on('link[href*="yastatic"]', new YaStaticRewriter())
.on('script', new YaStaticRewriter('element'));
html = yastaticrewriter.transform(html);
...
class YaStaticRewriter
{
element(element)
{
const href = element.getAttribute('href');
const src = element.getAttribute('src');
if ((href !== null && href.includes('yastatic')) || (src !== null && src.includes('yastatic'))) {
element.remove();
}
}
text(element) {
if (element.text !== null && element.text.includes('yashare')) {
element.remove();
}
}
}
I expect all script tags containing “yashare” in text to be removed
var yashareInstance1 = new Ya.share({
element: “yashare1”,
l10n: "default",
theme: "default",
elementStyle: {
type: "button", quickServices: ['facebook', 'gplus', 'twitter', 'vkontakte']
},
popupStyle: {copyPasteField:true,
blocks: {'': ['blogger', 'evernote', 'linkedin', 'lj', 'moikrug', 'moimir', 'myspace', 'odnoklassniki', 'surfingbird']}
}
});
</script>
but get
<script type="text/javascript">
</script>
as result (all content in tags is removed, but tags still exist)
From what I understand you cannot access the text content of an element via the element reference. Equally, you cannot access the surrounding element when receiving a text element.
If Cloudflare supported pseudo classes you could do something along the lines of script:contains("yashare")
but that doesnt seem to be supported either.
In short, I somewhat doubt your use case is possible with HTMLRewriter and you might have to go the traditional route of string parsing.