为什么getElementsByClassName()访问影子DOM中的元素?
Why is getElementsByClassName() accessing elements in the shadow DOM?
我正在使用聚合物框架来构建web应用程序。我有一个自定义表元素,它使用其他基本的聚合物元素作为构建块。table元素有一列和几行信息。我正在研究在表中突出显示信息的行为。突出显示行为要么突出显示表中的整行,要么只突出显示行中相关信息的特定位。
我创建了一个新的自定义元素,表和突出显示行为将在其中起作用。有需要高亮显示的行的表得到一个高亮类。
<link rel="import" href="../polymer/polymer.html">
<link rel="import" href="../highlight-behavior/highlight-behavior.html">
<link rel="import" href="../custom-table/custom-table.html">
<dom-module id="test-sync">
<template>
<style>
:host {
display: block;
box-sizing: border-box;
}
</style>
<custom-table class="highlight"></custom-table>
<custom-table class="highlight"></custom-table>
<custom-table class="highlight"></custom-table>
<custom-table class="highlight"></custom-table>
</template>
为了创建一个统一的方法来处理突出显示功能,我还将相同的类分配给排列表中的行的自定义元素。我完全期望必须将它们的属性气泡化到父(表),以便高亮显示行为可以与它们交互。
在高亮显示行为中,我写了:
<script>
/** @polymerBehavior HighlightBehavior*/
HighlightBehavior = {
attached: function() {
console.log(this.getElementsByClassName('highlight'));
}
}
</script>
在我的日志中,我希望只返回四个自定义表元素。但事实并非如此,我还在带有highlight类的自定义表阴影DOM中获得了元素。现在这是超级方便的,但这对我来说没有意义,因为我了解聚合物。我认为我必须直接查询阴影根以获得包含在其中的元素。我想知道为什么城堡的墙壁在这种情况下似乎被破坏了?
默认是shady DOM
,并且阴暗的DOM不会阻止您访问元素的内容。
启用shadow DOM https://www.polymer-project.org/1.0/docs/devguide/settings
或使用聚合物DOM API https://www.polymer-project.org/1.0/docs/devguide/local-dom
Polymer.dom(this.root).getElementsByClassName('highlight');
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 使用jquery创建dom元素会导致ie9出现拒绝访问错误
- 通过AJAX侦听向DOM添加某些元素
- 如何在使用Ractive.extend()时引用DOM元素
- 在d3中向DOM元素添加了图像,但现在它赢得了't过渡
- Selenium无法在浏览器DOM中定位元素
- 如何'剪切'DOM元素并将其显示在其他位置
- 转换<a>使用jQuery将文本字符串转换为dom元素
- 从dom中删除任何元素后,Touchmove事件停止触发
- d3在数据更新时错误地附加了dom元素
- 访问VueJS中的DOM元素
- 在Meteor中如何查找DOM元素(渲染后)
- 找到元素DOM的根节点(阴影或光)的最佳方法是什么?
- 在querySelector:如何获得第一个和最后一个元素?dom中使用的遍历顺序