当然可以!如果你希望使用另一种方法来解决 vlParent
和 outerBox
的冲突,我们可以考虑使用 CSS Flexbox 或 Grid 布局来同时展示这两个元素,而不是在 DOM 结构中直接嵌套它们。这样,两个组件可以并排或垂直排列,从而达到你想要的效果。
修改方案三:使用 Flexbox 布局
- 创建一个包含
vlParent
和outerBox
的外部容器。 - 将这个外部容器的样式设置为 Flexbox,以便能够并排显示。
以下是实现这一点的示例代码:
else if ('0BJECTS' == init.type) {
let self = new Fieldset(init.useLang ? lang(init.title) : init.title);
let me = this;
var vlParent = new VLayout().setVerticalAlign('top');
// 创建外部容器
const container = document.createElement('div');
// 设置容器为 flexbox
Object.assign(container.style, {
display: 'flex',
flexDirection: 'column', // 可以改为 'row' 如果你想并排显示
gap: '10px', // 间距
padding: '10px'
});
// 添加 vlParent 到容器中
container.appendChild(vlParent);
// 创建 outerBox
if (!document.getElementById('outerBox')) {
const outerBox = document.createElement('div');
outerBox.id = 'outerBox';
Object.assign(outerBox.style, {
border: '2px solid #000',
padding: '19px',
borderRadius: '5px',
width: '300px'
});
const tabsContainer = document.createElement('div');
Object.assign(tabsContainer.style, {
display: 'flex',
marginBottom: '19px'
});
const tabs = [
{ name: '逾期', content: '逾期内容' },
{ name: '未逾期', content: '未逾期内容' }
];
const contentContainer = document.createElement('div');
Object.assign(contentContainer.style, {
border: '1px solid #000',
padding: '19px'
});
const switchTab = (tab, content) => {
tabsContainer.querySelectorAll('.tab').forEach(t => t.classList.remove('active-tab'));
tab.classList.add('active-tab');
contentContainer.textContent = content;
};
tabs.forEach(({ name, content }) => {
const tab = document.createElement('div');
tab.textContent = name;
tab.classList.add('tab');
tab.addEventListener('click', () => switchTab(tab, content));
tabsContainer.appendChild(tab);
});
switchTab(tabsContainer.querySelector('.tab'), tabs[0].content);
outerBox.appendChild(tabsContainer);
outerBox.appendChild(contentContainer);
// 将 outerBox 添加到外部容器中
container.appendChild(outerBox);
// 将最终的 container 设置为 self 的主体
self.setBody(container);
const style = document.createElement('style');
style.innerHTML = `
.tab {
padding: 10px;
cursor: pointer;
border: 1px solid #000;
margin-right: 5px;
color: #000;
background-color: #fff;
}
.active-tab {
background-color: #000;
color: #fff;
}
`;
document.head.appendChild(style);
}
}
说明
- Flexbox 布局:我们将外部容器 (
container
) 设置为 Flexbox,可以通过调整flexDirection
属性来控制其子元素是垂直排列(column
)还是水平排列(row
)。 - 间距:通过设置
gap
属性,可以轻松调整两个组件之间的间距。 - 可扩展性:这种布局方式使得将来添加其他组件时会更方便,同时也保持了良好的结构和样式。
这种方法能够有效地管理多个 DOM 元素,并且具有较强的灵活性和可维护性。希望这对你有帮助!如果还有其他需求,请随时告诉我。
内容由零声教学AI助手提供,问题来源于学员提问