我正在创造一种聚合物元素。我已经制作了模板,现在正在编写脚本。由于某种原因,document.querySelector为class和id选择器返回null。不确定这是否与聚合物不起作用(没有理由不应该)或者我没有输入某些东西或者其他什么是错误的。
事件card.html
<link rel="import" href="../components/polymer/polymer.html">
<link rel="import" href="event-card-description.html">
<polymer-element name="event-card" attributes="header image description">
<template>
<style>
.card-header {
display: block;
position: static;
font-size: 1.2rem;
font-weight: 300;
width: 300px;
height: 300px;
border-radius: 50%;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
overflow: hidden;
}
event-card-description {
margin: 0;
position: relative;
top: 225px;
}
</style>
<div
style="background: url(../images/{{image}}.jpg) no-repeat; background-size: cover"
class="card-header" layout horizontal center
on-mouseover='{{onHovered}}'
on-mouseout='{{onUnhovered}}'>
<event-card-description
id="description"
header={{header}}
description={{description}}>
</event-card-description>
</div>
</template>
<script>
Polymer('event-card', {
onHovered: function() {
var elem = document.querySelector("#description");
console.log(elem);
}
});
</script>
</polymer-element>
答案 0 :(得分:15)
<event-card-description id="description">
位于元素的影子dom中。 document.querySelector("#description")
正在主文档中寻找id#description
的节点。由于阴影dom边界隐藏了节点,因此预计找不到该节点。尝试:
this.shadowRoot.querySelector("#description");
然而,Polymer有一个很棒的功能,其中具有id的静态元素被映射到this.$.<id>
。您可以使用this.$.description
来获取该元素。
答案 1 :(得分:0)
对于属性中的多个值,请使用~
符号,例如,
var elem = document.querySelector("[attributes~=description]");
,或者如果您仅想将其用于元素polymer-element
,请使用:
var elem = document.querySelector("polymer-element[attributes~=description]");