cqwcns 发表于 2023-1-18 11:58

VUE3,创建和渲染dom元素的问题

需求是先获得页面上的父元素,然后向该父元素添加多个子元素。
首先我尝试这样,即先后添加:
const onEditorReady = () => {
console.log('EditorReady');
// 获得父元素
const domEditorToolBar = document.getElementsByClassName('ck-toolbar__items');
// 创建子元素
const domBtnA = h('button', { class: 'ck ck-button', onClick: doEditorFullScreen }, 'A');
const domBtnB = h('button', { class: 'ck ck-button', onClick: doEditorFullScreen }, 'B');
// 渲染子元素
render(domBtnA, domEditorToolBar);
render(domBtnB, domEditorToolBar);
}
存在问题:结果只会渲染出最后一个,即B,A未被渲染出来,不知道什么原因。

然后我尝试嵌套子元素,例如这样:
const onEditorReady = () => {
console.log('EditorReady');
// 获得父元素
const domEditorToolBar = document.getElementsByClassName('ck-toolbar__items');
// 创建子元素
const domBtnA = h('button', { class: 'ck ck-button', onClick: doEditorFullScreen }, 'A');
const domBtnB = h('button', { class: 'ck ck-button', onClick: doEditorFullScreen }, 'B');
// 渲染子元素
render(h('span', {}, ), domEditorToolBar);
}

存在问题:A和B都被渲染出来了,可见实际上也是渲染了一个span(包含A和B),结构变成了:
<父元素>
   <原有子元素>
   <原有子元素>
   <span>
   <A/>
   <B/>
   </span>
</父元素>

由于加套了一个span会影响元素样式,所以我不能使用第二种方法。


请教各位大佬,这种需求应该怎么写?感谢

bilibini 发表于 2023-1-18 12:12

看一下你的render函数怎么写的

cqwcns 发表于 2023-1-18 12:47

bilibini 发表于 2023-1-18 12:12
看一下你的render函数怎么写的

我用的是直接从vue导出的:

import { ref, h, render } from 'vue';

13604811047 发表于 2023-1-18 13:47

本帖最后由 13604811047 于 2023-1-18 13:48 编辑


import { Fragment } from "vue";   
render(h(Fragment, ), domEditorToolBar);

freesaber 发表于 2023-1-18 13:49

把<A/> <B/>,写在一个组件里面,然后用template
<template>
<A/>
   <B/>
</template>
h(这个组件)

ibilibili 发表于 2023-1-18 15:00

既然用了vue就不要操作dom了。
页: [1]
查看完整版本: VUE3,创建和渲染dom元素的问题