Подтвердить что ты не робот

Document.querySelector() возвращает значение null

Я создаю полимерный элемент. Я создал шаблон, и теперь я работаю над script. По какой-то причине document.querySelector возвращает 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>
4b9b3361

Ответ 1

<event-card-description id="description"> находится в вашем элементе shadow dom. document.querySelector("#description") ищет node с id#description в главном документе . Он ожидал, что node не будет найден, потому что граница теневого дома скрывает его. Попробуйте:

this.shadowRoot.querySelector("#description");

Однако у Полимера есть удивительная функция, в которой статические элементы, имеющие идентификаторы, отображаются на this.$.<id>. Вы можете использовать this.$.description для получения этого элемента.

Ответ 2

для нескольких значений в атрибутах используйте знак ~, например

var elem = document.querySelector("[attributes~=description]");

или если вы хотите использовать это только для элемента polymer-element:

var elem = document.querySelector("polymer-element[attributes~=description]");