JS/JQuery獲取不到頁面元素的幾種可能性

在寫JS或者是JQuery的時(shí)候,使用$("#btn1")或者Domcument.getElementById獲取相關(guān)標(biāo)簽元素的時(shí)候,偶爾會(huì)出現(xiàn),獲取不到相應(yīng)元素的情況。報(bào)出以下錯(cuò)誤等等:

Cannot read property 'XXX' of null 錯(cuò)誤

Cannot read property 'visibility' of undefined

其實(shí)導(dǎo)致這樣的問題的原因只有一種,那就是沒有獲取到相應(yīng)的標(biāo)簽元素值,也就是 $("#btn1")取到的值是null,所以再去獲取這個(gè)元素下面的屬性的時(shí)候,自然就會(huì)報(bào)錯(cuò)了,而導(dǎo)致出現(xiàn)這樣的情況的原因,可能有以下幾種。

1.Html頁面尚未加載完,在元素加載完成之前就調(diào)用元素

根據(jù)html頁面的特性,是從上到下依次加載的,也就是遇到什么加載什么,所以,有可能JS方法會(huì)先于頁面DOM元素加載。

如果在這個(gè)時(shí)候提前調(diào)用了JS方法,由于標(biāo)簽元素尚未加載完成,是找不到相應(yīng)元素的,所以就會(huì)報(bào)出這種找不到元素的錯(cuò)誤。

解決這類型的錯(cuò)誤的方法也很簡單,只需要:

把相應(yīng)的JS代碼放在html頁面的最后面,保持在標(biāo)簽元素加載完后再調(diào)用相應(yīng)的JS方法即可。

或者是使用:

JS的window.onload()方法

onload 事件會(huì)在指示頁面包含圖片等文件在內(nèi)的所有元素都加載完成立即發(fā)生。

JQuery的ready()方法

ready事件會(huì)在文檔結(jié)構(gòu)已經(jīng)加載完成(不包含圖片等非文字媒體文件)后立即發(fā)生。

思想就是讓JS方法在頁面加載完全之后再運(yùn)行,這樣就可以保證相應(yīng)元素一定加載完成了。

2.多層iframe嵌套,獲取不到不同層級(jí)iframe的元素

當(dāng)整個(gè)HTML頁面使用了多層iframe嵌套的情況時(shí),就會(huì)容易出現(xiàn)這種找不到相應(yīng)內(nèi)層iframe中的元素情況。

當(dāng)我們?nèi)カ@取元素的時(shí)候,會(huì)默認(rèn)去外層的iframe中尋找元素,如果是多層嵌套的iframe頁面,那我們要去內(nèi)層iframe中尋找元素的時(shí)候,就要通過iframe ID 切換到指定的iframe層中,再獲取元素。

var obj=document.getElementById("Iframe").contentWindow;

obj.document.getElementById("menu").style.visibility="hidden";//隱藏元素

還有一種情況就是調(diào)用的JS方法處于內(nèi)層iframe中,而外層窗口又沒有相應(yīng)ID時(shí)。

可以使用window.parent的方法,獲取當(dāng)前窗口的父窗口,再使用父窗口的方法獲取相應(yīng)元素。

window.parent.document.getElementById("null_box").getElementsByTagName("input")[0].style.visibility="visible";//恢復(fù)元素

當(dāng)獲取不到相應(yīng)的標(biāo)簽元素的時(shí)候,要記住前端的一種思想

當(dāng)這個(gè)元素標(biāo)簽獲取不到的時(shí)候,可以嘗試的去找這個(gè)元素標(biāo)簽的父標(biāo)簽。

按照這種尋找父親的思想一層層往上找,當(dāng)能獲取到最外層父類時(shí),再按照這種層級(jí)關(guān)系一層層往下找,就可以找到這個(gè)元素了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,817評(píng)論 1 45
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,154評(píng)論 1 92
  • 前端開發(fā)面試題 面試題目: 根據(jù)你的等級(jí)和職位的變化,入門級(jí)到專家級(jí),廣度和深度都會(huì)有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,684評(píng)論 0 7
  • 前端開發(fā)面試知識(shí)點(diǎn)大綱: HTML&CSS: 對(duì)Web標(biāo)準(zhǔn)的理解、瀏覽器內(nèi)核差異、兼容性、hack、CSS基本功:...
    秀才JaneBook閱讀 2,774評(píng)論 0 25
  • Welcome to Managing Asia, I'm Christine. 歡迎來Managing Asia...
    般若星星燦的垚淼閱讀 496評(píng)論 0 0

友情鏈接更多精彩內(nèi)容