2016-07-06 4 views
5

私にはがあります。HTMLElementを入手する方法がわかりません。例えば要素から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

'let nodes = document.querySelectorAll( 'a')をNodeListOf ;として、または少なくとも割り当てを行うときに、' let node = nodes [i] as 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

私はそれが正しいとは思わない、私は 'style '私の編集者はまだそれが' Element'だと言っています –

+0

はい、できます。例えば'nodes [i] .style.backgroundColor = "red"; ' –

+0

マイナーなタイプミス(無関係なドット)がありますが、コードはうまくいくはずです:' var node = nodes [i]; 'おそらく、要素に追加するだけでなく、変数にロードすることもできます。 – Cam

0

この方法は、要素をHTMLElementにキャストすることです。

あなたはそれをキャストする必要が
let nodes: NodeListOf<HTMLElement> = document.querySelectorAll('a') as NodeListOf<HTMLElement>; 
+0

問題を打ち明けました:typescriptを使って一般的な 'Element'に型キャストすると、' HTMLElement'属性にアクセスする機能が削除されます。 @ Erikの 'ES5'の例では、各ノードは暗黙的に型キャストのないHTMLElementです。 – Cam

+0

@Cam "HTMLElement属性にアクセスする機能が削除されました"それはなぜでしょうか? –

+0

@Nitzan後退が順調です。私が言わなければならないことは:明示的な型キャストなしでは、コンパイラは明らかにHTMLElement属性へのアクセス方法に関する十分な情報が不足していました。それぞれのノードを 'HTMLElement'にキャストするか(あなたが行ったように)、またはES5に移動することで問題を解決できます。 – Cam

関連する問題