2016-07-06 7 views
5

से HTMLElement प्राप्त करें मेरे पास Element है, और मैं यह नहीं समझ सकता कि HTMLElement इससे कैसे प्राप्त करें।तत्व

उदाहरण के लिए:

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

मैं तो इतना की तरह उन्हें प्राप्त:

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? 
} 

संपादित

enter image description here

यहाँ कोड है:

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

आपको एक प्रकार का दावा https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html – basarat

उत्तर

10

तुम बस यह कास्ट करने के लिए की जरूरत है:

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'; 
} 

तुम भी एक अधिक विशिष्ट तत्व पर कास्ट कर सकते:

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

बात यह है कि document.querySelectorAll रिटर्न सबसे सामान्य तत्व प्रकार, लेकिन यदि आप खुद को जानते हैं तो विशिष्ट प्रकार क्या है तो आप कास्ट कर सकते हैं, क्योंकि आप कंपाइलर की तुलना में "बेहतर जानते हैं"।

+2

क्वेरी करने के दौरान भी जोर दे सकता है: 'नोड्स = document.querySelectorAll (' a ') को नोडलिस्ट के रूप में ; या कम से कम असाइनमेंट करते समय:' node = nodes [i] HTMLAnchorElement के रूप में दें; –

+0

हाँ, मुझे संदेह है कि यह अधिक सुविधाजनक होगा –

2

आप करीब हैं!

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

उपयोग करने की आवश्यकता नहीं है मुझे नहीं लगता कि यह सही है, क्योंकि मैं 'शैली तक नहीं पहुंच सकता 'मेरा संपादक कहता है कि यह अभी भी एक' तत्व ' –

+0

हां है, आप कर सकते हैं। उदाहरण के साथ 'नोड्स [i] .style.backgroundColor = "red"; ' –

+0

एक मामूली टाइपो (बाहरी डॉट) है लेकिन कोड को काम करना चाहिए:' var node = nodes [i]; 'आप शायद कुछ करना चाहते हैं तत्व, इसे एक चर में लोड करने के अलावा। – Cam

0

जिस तरह से काम करता है, वह तत्व को HTMLElement पर डालना है।

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

आपने समस्या पर हिट किया है: टाइपस्क्रिप्ट के माध्यम से जेनेरिक 'एलिमेंट' पर टाइपकास्टिंग 'HTMLElement' विशेषताओं तक पहुंचने की क्षमता को हटा देता है। यह उल्लेखनीय है कि @ एरिक के 'ES5' उदाहरण में, प्रत्येक नोड टाइपकास्टिंग के बिना निश्चित रूप से 'HTMLElement' है। – Cam

+0

@Cam यह "HTMLElement विशेषताएँ तक पहुंचने की क्षमता को हटा देता है"? ऐसा क्यों होगा? –

+0

@ निट्टन एक वापसी वापस क्रम में है। मुझे क्या कहना चाहिए था: स्पष्ट टाइपकास्टिंग के बिना, संकलक में पर्याप्त रूप से पर्याप्त जानकारी नहीं थी कि HTMLElement विशेषताएँ कैसे पहुंचे। या तो प्रत्येक नोड को 'HTMLElement' (जैसे आपने किया है) पर कास्टिंग या ES5 को पारदर्शी करना समस्या को हल करना चाहिए। – Cam

संबंधित मुद्दे