javascript - 在 shadow dom 中选择元素

标签 javascript web-component shadow-dom

我正在构建 Web 组件并且一切正常,但是当我尝试获取元素的宽度时遇到了这个问题,它记录了我

Cannot read property 'getBoundingClientRect' of null

下面一行记录实际宽度。

我的代码:

attributeChangedCallback(name, oldVal, newVal) {
    const innerBar = this.shadow.querySelector('.progress-name-inner');
    const progressTitle = this.shadow.querySelector('.progress-title');
    console.log(progressTitle.getBoundingClientRect().width)

    switch (name) {
        case 'title':
            this._title = newVal || '';
            break;

        case 'complete':
            this._complete = parseInt(newVal) || 0;

            innerBar.style.width = this.complete + '%'
            break;
    }
}

最佳答案

当内联定义 HTML 元素属性时(在 HTML 代码中),attributeChangedCallback() 方法在 connectedCallback() 方法之前被调用。

因此,如果要处理自定义元素属性,最好在 constructor() 方法中设置 Shadow DOM HTML 内容。

此外,当异常被抛出时,方法执行停止,这就是 innerBar.style.width 上的错误没有被抛出的原因。

关于javascript - 在 shadow dom 中选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52466388/

相关文章:

javascript - 如何在 'ng-click' 事件上动态调用 angularjs 函数?

javascript - 将 $index 和 $data 作为参数传递给点击处理函数

javascript - 提交后如何从下拉列表中删除选定的值

javascript - 如何告诉 JSDoc 我将命名空间对象作为参数传递?

javascript - 使用 Web 组件在登录页面中保存凭据

javascript - 元素内部的自定义 div 不保留属性

javascript - webcomponents.js 影子 DOM :host selector does not work on Safari and Firefox

vaadin - 带有 vaadin 的 Web 组件和带有 svelte 的汇总 : Primary button ignores theme attribute

javascript - 8Tracks API 自定义元素与 Polymer 不起作用

javascript - 如何访问嵌套 Web 组件的祖先?