insertAdjacentElement 未在目标元素中添加或附加元素
insertAdjacentElement is not adding or appending the element in the target element
我创建了一个函数来创建div
function createDivElement(className: string): HTMLDivElement {
const divElement = document.createElement('div')
divElement.className = className
return divElement
}
之后我创建了另一个函数returns elements or structure of Tooltip
I aming
function generateTooltip() {
const TooltipParent = createDivElement(`tooltip-parent-${randomString(8)}`)
const Tooltip = createDivElement(`tooltip-${randomString(8)}`)
const TooltipArrow = createDivElement(`tooltip-arrow-${randomString(8)}`)
const TooltipContent = createDivElement(`tooltip-content-${randomString(8)}`)
return { TooltipParent, Tooltip, TooltipArrow, TooltipContent }
}
最后我创建了一个创建工具提示的函数
const Tooltip = function (props: Props) {
'use strict'
// rest of the code
generateTooltip().Tooltip.insertAdjacentElement('afterbegin', generateTooltip().TooltipArrow)
generateTooltip().Tooltip.insertAdjacentElement('beforeend', generateTooltip().TooltipContent)
generateTooltip().TooltipParent.insertAdjacentElement('afterbegin', generateTooltip().Tooltip)
// appending on the body
document.body.appendChild(generateTooltip().TooltipParent)
}
现在在 DOM
函数的最后一行 即 在主体上附加 .tooltip-parent
div 正在运行其余代码是无法正常工作,这意味着此行上方的元素未附加到目标元素中。
正如你所看到的,只有我附加在 body 上的元素在 DOM
中呈现
每次调用 generateTooltip()
都会生成一组新元素。例如,调用 generateTooltip().TooltipParent
两次将为您提供两个不同的 TooltipParent
div。因此没有元素被正确引用和附加。
解决方法是只调用 generateTooltip()
一次,然后使用该调用中的所有元素来构建您的结构。
const TooltipElement = function (props: Props) {
const {
TooltipParent,
Tooltip,
TooltipArrow,
TooltipContent
} = generateTooltip();
Tooltip.append(TooltipArrow, TooltipContent);
TooltipParent.append(Tooltip);
document.body.append(TooltipParent);
}
我将 Tooltip
重命名为 TooltipElement
以避免重名,因为函数中已经有 Tooltip
元素。
您仍然可以使用 insertAdjacentElement
而不是 append
,但我没有看到使用前者相对于后者的真正优势。
我创建了一个函数来创建div
function createDivElement(className: string): HTMLDivElement {
const divElement = document.createElement('div')
divElement.className = className
return divElement
}
之后我创建了另一个函数returns elements or structure of Tooltip
I aming
function generateTooltip() {
const TooltipParent = createDivElement(`tooltip-parent-${randomString(8)}`)
const Tooltip = createDivElement(`tooltip-${randomString(8)}`)
const TooltipArrow = createDivElement(`tooltip-arrow-${randomString(8)}`)
const TooltipContent = createDivElement(`tooltip-content-${randomString(8)}`)
return { TooltipParent, Tooltip, TooltipArrow, TooltipContent }
}
最后我创建了一个创建工具提示的函数
const Tooltip = function (props: Props) {
'use strict'
// rest of the code
generateTooltip().Tooltip.insertAdjacentElement('afterbegin', generateTooltip().TooltipArrow)
generateTooltip().Tooltip.insertAdjacentElement('beforeend', generateTooltip().TooltipContent)
generateTooltip().TooltipParent.insertAdjacentElement('afterbegin', generateTooltip().Tooltip)
// appending on the body
document.body.appendChild(generateTooltip().TooltipParent)
}
现在在 DOM
函数的最后一行 即 在主体上附加 .tooltip-parent
div 正在运行其余代码是无法正常工作,这意味着此行上方的元素未附加到目标元素中。
正如你所看到的,只有我附加在 body 上的元素在 DOM
中呈现每次调用 generateTooltip()
都会生成一组新元素。例如,调用 generateTooltip().TooltipParent
两次将为您提供两个不同的 TooltipParent
div。因此没有元素被正确引用和附加。
解决方法是只调用 generateTooltip()
一次,然后使用该调用中的所有元素来构建您的结构。
const TooltipElement = function (props: Props) {
const {
TooltipParent,
Tooltip,
TooltipArrow,
TooltipContent
} = generateTooltip();
Tooltip.append(TooltipArrow, TooltipContent);
TooltipParent.append(Tooltip);
document.body.append(TooltipParent);
}
我将 Tooltip
重命名为 TooltipElement
以避免重名,因为函数中已经有 Tooltip
元素。
您仍然可以使用 insertAdjacentElement
而不是 append
,但我没有看到使用前者相对于后者的真正优势。