0👍
Your approach is almost correct: all you need to do is to use a computed property for v-html
, so that you can do all the parsing in the computed property:
new Vue({
el: '#app',
data: {
postText: '<h2>Hello world</h2><iframe></iframe><p>Lorem ipsum</p>'
},
computed: {
parsedPostText() {
const el = document.createElement('div');
el.innerHTML = this.postText;
el.querySelectorAll('iframe').forEach(iframe => {
// Wrapper logic adapted from
// https://stackoverflow.com/a/57377341/395910
const wrapper = document.createElement('div');
iframe.parentNode.insertBefore(wrapper, iframe);
wrapper.appendChild(iframe);
});
return el.innerHTML;
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div id="post-body-text" class="post__main-text" v-html="parsedPostText"></div>
</div>
Source:stackexchange.com