【问题标题】:Wrap iframes with divs in DOM Vue way以 DOM Vue 方式用 div 包裹 iframe
【发布时间】:2020-10-11 15:46:45
【问题描述】:

我有一种情况,我的 Vue 组件以这种方式呈现 html(它来自数据库):

  <div
          id="post-body-text"
          class="post__main-text"
          v-html="postText"
        ></div>

现在在这个 HTML 中,可能有我想用特殊样式包装在 div 中的 iframe(以使 iframe 大小动态)

Vue 的方法是什么?因为我能找到的唯一选择是document.createlement("div"),然后执行本机 javascript 内容。哪个不行,估计和组件重新渲染有关

【问题讨论】:

    标签: javascript html vue.js vuejs2 vue-component


    【解决方案1】:

    您的方法几乎是正确的:您需要做的就是为v-html 使用计算属性,这样您就可以在计算属性中进行所有解析:

    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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 2018-01-16
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      相关资源
      最近更新 更多