v-html指令为什么会自动地多渲染HTML标签?

相关代码

<template>
  <div class="tableContent">
    <p v-html="res"></p>
  </div>
</template>
<script>
export default {
  ....
  data() {
    return {
      res:"你好这是<i style='color:red'>红色<i>的文字"
    };
  },
};
</script>

问题描述

我希望渲染出的html代码是

<p>你好这是<i style='color:red'>红色<i>的文字</p>

实际上渲染出的代码是
image.png

有没有大佬知道为什么会多出红框中的<i></i>标签?

阅读 3.9k
4 个回答
<script>
export default {
  ....
  data() {
    return {
      res:"你好这是<i style='color:red'>红色<i>的文字"  // 这里标签没有闭合? </i>
    };
  },
};
</script>
"你好这是<i style='color:red'>红色<i>的文字"

上面代码中的<i>标签没有闭合,vue内部识别为有两个<i>标签,然后在父级标签<p>闭合前帮你闭合了<i>,然后导致了两个<i>,具体实现过过程可以去阅读vue源码:
vue html-parser

你这是没有闭合标签导致的

是我粗心了,罪过,感谢各位大佬

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题