本教程详细讲解如何在vue 2应用中动态重构dom结构,将一系列`h1`标题及其后续的段落(`p`标签)分组,并封装到html的`
在处理来自内容管理系统(如Sanity.io)的数据时,我们常常会遇到需要将扁平化的内容结构转换为更具语义和交互性的HTML结构。例如,一个常见的场景是,内容以一系列
段落的形式呈现,如下所示:
标题一
段落内容1.1
段落内容1.2
标题二
段落内容2.1
段落内容2.2
段落内容2.3
我们的目标是将其重构为可折叠的 段落作为可折叠的详细内容,直到遇到下一个结构,使得每个
标题作为可折叠部分的摘要,其后的所有相关
标题。期望的输出结构如下:
标题一
段落内容1.1
段落内容1.2
标题二
段落内容2.1
段落内容2.2
段落内容2.3
这种转换无法通过简单的Vue模板绑定或计算属性直接实现,因为它涉及到对DOM元素的查找、创建、移动和替换,属于典型的原生DOM操作范畴。特别是在使用portable-text-to-vue这类库将富文本内容转换为Vue组件块时,这些块通常会渲染成一系列的HTML标签,此时进行DOM二次处理就显得尤为必要。
为了实现上述DOM结构的重构,我们需要在Vue组件的特定生命周期钩子中执行JavaScript代码来操作DOM。
文档末尾)的所有兄弟元素,并将它们移动到新的以下是在Vue 2组件中实现此DOM重构的详细步骤和示例代码。
在mounted()钩子中,使用document.getElementsByTagName('h1')来获取页面中所有的
mounted() {
// 获取当前组件的根元素,或者特定容器元素
const container = this.$el;
// 将HTMLCollection转换为数组,以便安全地遍历和修改DOM
const h1Elements = Array.from(container.getElementsByTagName('h1'));
// ... 后续操作
}遍历h1Elements数组。对于每个h1元素,我们需要: