document.querySelector()返回null

时间:2014-08-03 01:49:46

标签: javascript html html5 polymer shadow-dom

我正在创造一种聚合物元素。我已经制作了模板,现在正在编写脚本。由于某种原因,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>

2 个答案:

答案 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]");