2017-02-14 13 views
1

Я понимаю, что при нормальных обстоятельствах вы должны использовать querySelector для выбора одного элемента и querySelectorAll для нескольких. Однако я с удивлением обнаружил, что querySelectorAll не работает с одним элементом. Я ожидал, что он будет работать с одним или более. Я не могу найти ничего, что говорит, что не должен работать только с одним, поэтому я спрашиваю здесь, если это нормально и согласно спецификации?Невозможно использовать querySelectorAll для одного элемента?

HTML:

<div class="top container"> 
    <div class="pod" draggable="true">big</div> 
    <div class="pod" draggable="true">small</div> 
    <div class="pod" draggable="true">happy</div> 
    <div class="pod" draggable="true">rich</div> 
    <div class="pod" draggable="true">fast</div> 
</div> 

JS:

function dragStart(e) { 
    console.log("drag started"); 
    e.target.style.opacity = "0.5"; 
} 

работы с этой функцией (dragStart называется):

var topPods = document.querySelector(".top"); 
topPods.addEventListener("dragstart", dragStart); 

Но не работает с этим (функция dragStart не):

var topPods = document.querySelectorAll(".top"); 
topPods.addEventListener("dragstart", dragStart); 
+1

'document.querySelectorAll [0] === document.querySelector ("." Сверху)' - бывший возвращает массив-подобный объект, последний возвращает один элемент. –

+0

См. Также [Развернуть итерируемый элемент или неистребимый элемент в массив без проверки элемента .length] (http://stackoverflow.com/questions/40198807/expand-an-iterable-element-or-non-iterable-element -into-a-array-without-checkin) – guest271314

ответ

5

querySelectorAll возвращает NodeList, а не один элемент (даже если результат запроса является только одним элементом). Таким образом, вы пытаетесь подключить прослушиватель событий к этому NodeList, а не к элементу.

Это работает (обратите внимание на [0]): ("верх ")

var topPods = document.querySelectorAll(".top"); 
topPods[0].addEventListener("dragstart", dragStart); 
+1

... что является * целым * причиной, почему руководство должно использовать querySelector, когда вы знаете, что у вас есть только один элемент для работы. – BoltClock

+0

OMG, конечно. Я действительно знаю это, но пропустил это. Общий мозговой пердит. Я бы удалил этот вопрос из-за смущения, но у других может быть один и тот же мозг. лол – AlwaysLearning

 Смежные вопросы

  • Нет связанных вопросов^_^