2016-07-06 14 views
5

Tôi có một số Element và tôi không thể tìm ra cách nhận được HTMLElement từ đó.Nhận HTMLElement từ Phần tử

Ví dụ:

<a href="">A link</a> 
<a href="">Another link</a> 

sau đó tôi nhận được chúng như vậy:

var nodes: NodeListOf<Element> = document.querySelectorAll('a'); // Returns a NodeList of Elements 
for (let i = 0; i < nodes.length; i++) { 
    var node = nodes.item(i); 
    // How can I get the HTMLElement here? 
} 

Sửa

enter image description here

Đây là mã:

let nodes: NodeListOf<Element> = document.querySelectorAll('a'); 
for (let i = 0; nodes[i]; i++) { 
    let node = nodes[i]; 
    var c = nodes[i].style.backgroundColor = 'red'; 
} 
+0

bạn cần phải sử dụng xác nhận loại https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html – basarat

Trả lời

10

Bạn chỉ cần để cast nó:

let nodes = document.querySelectorAll('a'); 
for (let i = 0; nodes[i]; i++) { 
    let node = nodes[i]; 
    var c = (nodes[i] as HTMLElement).style.backgroundColor = 'red'; 
} 

Bạn thậm chí có thể cast vào một yếu tố cụ thể hơn:

(nodes[i] as HTMLAnchorElement).style.backgroundColor = 'red'; 

Cái này là document.querySelectorAll lợi nhuận các loại nguyên tố chung nhất, nhưng nếu bạn biết mình là loại cụ thể thì bạn có thể truyền, bởi vì bạn "biết rõ hơn" so với trình biên dịch.

+2

Cũng có thể khẳng định nó khi thực hiện truy vấn: 'let nodes = document.querySelectorAll ('a') là NodeListOf ;' hoặc ít nhất khi thực hiện phép gán: 'let node = nodes [i] là HTMLAnchorElement;' –

+0

Vâng, tôi nghi ngờ rằng nó sẽ thuận tiện hơn –

2

Bạn thân thiết!

var nodes = document.querySelectorAll('a'); // Returns a NodeList of Elements 
for (let i = 0; nodes[i]; i++) { 
    // node is your element! 
    var node = nodes[i]; 
    node.style.backgroundColor = "blue"; 
} 
+1

Tôi không nghĩ điều đó là chính xác vì tôi không thể truy cập vào 'kiểu 'trình soạn thảo của tôi nói rằng nó vẫn là một 'Nguyên tố' –

+0

Có, bạn có thể. Với ví dụ: ´nodes [i] .style.backgroundColor = "red"; ' –

+0

Có một lỗi đánh máy nhỏ (dấu chấm không liên quan) nhưng mã sẽ hoạt động:' var node = nodes [i]; 'Bạn có thể muốn làm điều gì đó với phần tử, ngoài việc tải nó vào một biến. – Cam

0

Cách hoạt động, là truyền phần tử đến HTMLElement.

let nodes: NodeListOf<HTMLElement> = document.querySelectorAll('a') as NodeListOf<HTMLElement>; 
+0

Bạn đã gặp phải vấn đề: typecasting thành một 'Element' chung thông qua kiểu chữ loại bỏ khả năng truy cập các thuộc tính' HTMLElement'. Điều đáng nói đến là trong ví dụ 'ES5' của @ Erik, mỗi nút là một' HTMLElement' hoàn toàn không có kiểu chữ. – Cam

+0

@Cam Nó "loại bỏ khả năng truy cập các thuộc tính HTMLElement"? Tại sao bạn đã làm được điều đó? –

+0

@Nitzan Lệnh rút lại được thực hiện theo thứ tự. Những gì tôi cần phải nói: không rõ ràng, trình biên dịch hiển nhiên thiếu thông tin đầy đủ về cách truy cập các thuộc tính HTMLElement. Việc truyền mỗi nút tới 'HTMLElement' (như bạn đã làm) hoặc chuyển sang ES5 sẽ giải quyết được sự cố. – Cam

Các vấn đề liên quan