I use Madcap Flare to write web help. This comes with useful proxies that auto-generate navigation when built. I need to manipulate one of these proxies. This is important because I have to work within the structure they use, and can’t just add my div in the html as usual.
PLEASE NOTE: I cannot directly change the html in this situation. I can only add css or javascript.
So here’s the problem. I need to add <div class="eplanation-wrapper">
before <p class="explanation-heading">
and it’s closing </div>
after the last <p class="explanation-item">
.
I’ve gotten the selectors to work and place the inserts in the correct places, but they are registering as strings, not code.
(The other heading/item class pairings will get the same treatment)
<div class="MCRelationshipsProxy_0">
<p class="explanation-heading">Related Articles</p>
<p class="explanation-item"><a href="">link</a></p>
<p class="explanation-item"><a href="">link</a></p>
<p class="explanation-item"><a href="">link</a></p>
<p class="howTo-heading">How To Guides</p>
<p class="howTo-item"><a href="">link</a></p>
<p class="reference-headaing">Reference Articles</p>
<p class="reference-item"><a href="">link</a></p>
</div>
<script>
const explanationHeading = document.querySelector('p.explanation-heading');
explanationHeading.before('<div class="explanation-wrapper">');
const explanationItem = document.querySelectorAll('p.explanation-item');
const lastExplanationItem = explanationItem[explanationItem.length - 1];
lastExplanationItem.after('</div>');
</script>
Current broken state:
current broken state
GOAL :
<div class="MCRelationshipsProxy_0">
<div class="explanation-wrapper"><p class="explanation-heading">Related Articles</p>
<p class="explanation-item"><a href="">link</a></p>
<p class="explanation-item"><a href="">link</a></p>
<p class="explanation-item"><a href="">link</a></p></div>
<p class="howTo-heading">How To Guides</p>
<p class="howTo-item"><a href="">link</a></p>
<p class="reference-headaing">Reference Articles</p>
<p class="reference-item"><a href="">link</a></p>
</div>
I have tried:
before() after()
prepend() append()
insertAdjacentHTML(beforebegin / afterend)
insertAdjacentText(beforebegin / afterend)
3
Answers
Here’s one way to do it:
.before()
and.after()
will insert the parameters as strings unless they are DOM nodes.You essentially need to remove the items from the DOM, wrap them in your new div and insert the bundle back into the DOM.
Just another approach for added examples.