如何从全局名称空间访问Polymer元素中的DOM元素?

戴维·诺蒂克

我想从我的app.dart全局访问my-app-as-an-element.html中的DOM元素(因为这是我想从多个地方调用的方法,例如,它更改了页面标题),但是包裹在阴影和所有东西中,我似乎无法理解。有一个窍门,例如

HtmlElement el;
el = document.querySelector('body /deep/ #page-title');

但是/ deep /在Safari中不受尊重,因此不在讨论之列。有想法吗?

克里斯·W

您尝试做的事情直接违背了Polymer的理念:使用Shadow DOM等进行所有封装的目的是要具有可重用的组件来管理自己的状态,包括DOM。

如果拥有您要访问的DOM元素的元素是自定义元素(即您或公司的某人已经编写了该元素),则最佳解决方案是将所需的功能公开为该元素上的公共方法。

举例来说,您的元素有一个,<h1>而您想更改其内容。您可以通过以下方式实现此目的:

Polymer("my-custom-element", {
    changeTitle: function(newTitle) {
        // this operates on the element's Shadow DOM *only*,
        // NOT the entire page
        document.querySelector('h1').htmlContent = newTitle;
    }
})

然后,您可以从全局代码中进行此调用:

document.querySelector("my-custom-element").changeTitle("My New Title");

如果您要更改的元素是公共元素(例如从core-elementspaper-elements)拥有的,或者是您从某个存储库下载的任何内容,请阅读文档,看看它是否以某种方式公开了您需要的功能。如果没有,您可以尝试编写自己的自定义元素以扩展该元素。在扩展元素中,您可以使用<shadow></shadow>标签插入扩展对象的Shadow DOM ,并以与上述相同的方式通过元素的JavaScript对其进行操作。

编辑:其实,有一种方法可以直接做您想做的事情,尽管我只建议这样做。如果阅读Shadow DOM 201,则会注意到您可以通过.shadowRoot属性访问元素的Shadow DOM 这为您提供了另一个Document对象,您可以在其上.querySelector再次使用它,如下所示:

document.querySelector('my-custom-element').shadowRoot.querySelector('h1');

甚至

document.querySelector('my-custom-element::shadow h1');

这为您提供了元素的句柄,然后可以根据需要进行修改。但是同样,除非您需要快速访问此元素以进行调试,否则我建议您不要使用它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

访问头文件中定义的名称空间中的元素

来自分类Dev

如何在iFrame中访问DOM元素

来自分类Dev

如何在阴影DOM中调用Dart Polymer元素的方法?

来自分类Dev

如何使用js查询Polymer中的阴影dom元素?

来自分类Dev

如何从Polymer模板中访问自定义元素的主体?

来自分类Dev

如何访问全局名称空间中与模块中名称相同的名称?

来自分类Dev

如何使用XmlWriter在元素中编写名称空间

来自分类Dev

访问影子DOM中的元素

来自分类Dev

访问Aurelia中的DOM元素

来自分类Dev

Shadow DOM中的访问元素

来自分类Dev

访问$ .getJSON中的DOM元素

来自分类Dev

从 setTimeout 中访问 DOM 元素

来自分类Dev

jQuery:如何访问元素的名称

来自分类Dev

XSLT:如何在同一篇文章中访问名称空间类型和没有名称空间类型的元素

来自分类Dev

Polymer:如何显示在自定义/核心元素定义中未清除的DOM元素?

来自分类Dev

我是如何在Polymer 1.0元素中遍历一组DOM元素的?

来自分类Dev

访问Polymer中的所有内部元素?

来自分类Dev

在Polymer元素模板中访问div

来自分类Dev

如何使用Polymer查询元素DOM的Selector元素

来自分类Dev

如何在python中访问名称元组中的元素?

来自分类Dev

从全局名称空间访问App

来自分类Dev

如何在Angular指令中访问dom元素

来自分类Dev

如何从页面控制器访问指令中的dom元素

来自分类Dev

如何访问Angular DOM对象中的某些元素

来自分类Dev

如何访问元素并删除植于DOM中的特定类?

来自分类Dev

PowerBI Embedded-如何访问iframe中的DOM元素?

来自分类Dev

WiX删除根元素中的名称空间

来自分类Dev

从子元素中删除XML名称空间

来自分类Dev

从xml标记元素名称中删除空间

Related 相关文章

热门标签

归档