gpt4 book ai didi

javascript - 使用 slot 时如何使用 javascript 查找父元素宽度

转载 作者:行者123 更新时间:2023-11-29 20:32:34 25 4
gpt4 key购买 nike

我有一个自定义元素,其中有一个包含插槽的 div。

在那个插槽中,我有 JS 脚本,我想在其中获取插槽父 div 的宽度。

我知道单词很容易混淆 :)。

here is the sample code link

<!doctype html>
<body>
<script>
customElements.define('user-card', class extends HTMLElement {
connectedCallback() {
this.attachShadow({mode: 'open'});
this.shadowRoot.innerHTML = `
<style>
.name {
font-size: 24px;
width:200px;
background-color: yellow
}
</style>
<div class="name">Name:
<slot name="username"></slot>
</div>
<div class="dob">Birthday:
<slot name="birthday"></slot>
</div>
`;
this.shadowRoot.styles = `

`
}
});
</script>

<user-card>
<span slot="username">
<script>
function abc(event) {
console.log('Expected: ', this.document.getElementsByTagName('user-card')[0].shadowRoot.querySelectorAll('div.name')[0].offsetWidth)
console.log('Result: ',event.target.parentElement.offsetWidth);
}

</script>
<div onclick="abc(event)">
Ritesh Rajput
</div>

</span>
<span slot="birthday">01.01.2001</span>
</user-card>
</body>

理想情况下两者都应该返回相同的值

console.log('Expected: ', this.document.getElementsByTagName('user-card')[0].shadowRoot.querySelectorAll('div.name')[0].offsetWidth)
console.log('Result: ',event.target.parentElement.offsetWidth);

最佳答案

在第二个日志中元素event.target.parentElement<span slot="username"> .<span>inline宽度为 0。

您必须将 CSS 显示属性设置为 inline-block如果你想读取它的宽度。

可以在主页面定义:

<head>
<style>
span[slot=username] {
display: inline-block;
width: 100%;
}
</style>
</head>

或者通过 ::slotted() 在 Shadow DOM 中CSS伪元素:

<style>
::slotted(span[slot=username]) {
display: inline-block;
width: 100%;
}
</style>

customElements.define('user-card', class extends HTMLElement {
connectedCallback() {
this.attachShadow({mode: 'open'})
.innerHTML = `
<style>
div.name {
font-size: 24px;
width: 200px;
background-color: yellow;
display: inline-block;
}
::slotted(span[slot="username"]) {
display: inline-block;
width: 100%;
}
</style>
<div class="name">Name :
<slot name="username"></slot>
</div>
<div class="dob">Birthday:
<slot name="birthday"></slot>
</div>
`
}
})

function abc(event) {
console.log('Expected: ', this.document.getElementsByTagName('user-card')[0].shadowRoot.querySelector('.name').offsetWidth)
console.log('Result: ', event.target.parentElement.offsetWidth)
}
<user-card>
<span slot="username">
<div onclick="abc(event)">Ritesh Rajput</div>
</span>
<span slot="birthday">01.01.2001</span>
</user-card>

关于javascript - 使用 slot 时如何使用 javascript 查找父元素宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57678340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com