getElementXXX()函數怎么在TypeScript中使用?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
html文件:
<!-- 這倆隨便挑一個用就行 --> <input type="text" id="infoInput" name="infoInput"> <textarea id="infoArea" name="infoArea" rows="8" cols="80"></textarea> <!-- 這倆也隨便挑一個用就行 --> <span id="some">something happen!</span> <p id="any">anything ok!</p>
我現在要通過TypeScript獲取上面任意一個DOM元素,怎么做?有JS基礎都知道,操作DOM可以通過 document 完成:
// 由于DOM元素的ID是惟一的,所以這種方式獲取的是唯一的DOM元素 dom = document.getElementById('infoInput'); // name屬性是不唯一的,所以這種方式獲取的是所有 name=infoInput 的DOM元素,即一個數組 dom1 = document.getElementsByName('infoInput');
而在TypeScript中當然也可以這么做,但是在具體使用的時候除了需要聲明變量保存獲取到的DOM元素之外,還有一點小小的問題。
// Angular框架中 export class Some implements OnInit { ngOnInit() { let dom = document.getElementById('infoArea'); // 1. 獲取輸入框中的內容 let html = dom.innerHTML; let val = dom.value; // 2. 打印輸出 console.log(html); console.log(val); } }
這段代碼寫完會報一個錯:
Property 'value' does not exist on type 'HTMLElement' 不要緊,即使有錯誤提示,我們依舊可以運行并得到正確的結果。如果想在ts文件編譯失敗時不生成js文件,可以通過配置實現。
HTMLElement是什么?這是一個對象,它包含了所有HTML元素公有的屬性。
關于HTMLElement的詳細內容以及瀏覽器的兼容,可以查看MDN的這篇文章
來看一張圖:
圖源自nanaistaken的博客。
如果你恰好有一點面向對象編程的知識,那么這張圖就很容易理解,沒有也沒關系,畢竟無論是js還是ts,現在都增加了class關鍵字,引入了類的思想。
經過上面的分析,我們能夠知道: getElementXXX() 返回的是一個HTMLElement對象,而這個對象包含了所有DOM元素的公有屬性。而每種不同類別的DOM元素,又有自己的特性,也就是圖中的子類。
ts會做編譯檢查,所以會有錯誤提示,而js則不檢查,所以這也會留下安全隱患。
到這里,其實應該已經明白了現在這種情況該怎么解決以及以后該怎么使用getElementXXX函數了。
修改后的代碼:
export class Some implements OnInit { ngOnInit() { // *. 做一次類型轉換,或者做類型斷言 let dom = <HTMLInputElement>document.getElementById('infoArea'); let dom1 = document.getElementById('infoArea') as HTMLElement; // 1. 獲取輸入框中的內容 let html = dom.innerHTML; let val = dom.value; // 2. 打印輸出 console.log(html); console.log(val); } }
關于getElementXXX()函數怎么在TypeScript中使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。