2017-01-17 2 views
0

Я пробовал:Тип. Как объявить коллекцию DOM?

let $inputsCollection:HTMLCollection = document.body.querySelectorAll('input'); 

let $inputsCollection:HTMLCollection = document.body.querySelectorAll('input') as HTMLCollection; 

let $inputsCollection = document.body.querySelectorAll('input') as HTMLCollection; 

Я попытался несколько способов, но ни одна работа.

+1

Это потому, что [querySelectorAll] (https: //github.c om/Microsoft/TypeScript/blob/master/lib/lib.d.ts # L16786) возвращает 'NodeListOf ', а не 'HTMLCollection'. Вы не можете использовать 'NodeListOf'? –

+0

@NitzanTomer Спасибо человеку! – Smiranin

ответ

2

querySelectorAll не возвращает HTMLCollection, но NodeList. Нет смысла пытаться преобразовать NodeList в HTMLCollection. Вы можете сделать это, хотя:

let $inputsCollection: NodeListOf<HTMLInputElement> = 
    document.body.querySelectorAll('input'); 

Дело выше использует HTMLInputElement поэтому все элементы в списке должны быть из input элементов в HTML. Для случаев, когда вы получите разнородные элементы из запроса, вы можете сделать:

let $inputsCollection: NodeListOf<Element> = 
    document.body.querySelectorAll('*'); 

Это даже позволяют другие типы узлов, чем Element объектов, хотя querySelectorAll не может возвращать такие узлы:

let $inputsCollection2: NodeList = document.body.querySelectorAll('*'); 

FYI, методы, которые возвращают HTMLCollection объекты являются .getElementsBy... семейство методов (.getElementsByClassName, .getElementsByTagName и т.д.)

+0

Большое спасибо – Smiranin

+0

Добро пожаловать. – Louis