日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

document.getElementById 学习总结

發布時間:2025/4/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 document.getElementById 学习总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

document.getElementById獲取控件對象為空的解決方法

?
1.下面是一個簡單的例子,頁面加載時顯示一段信息


代碼如下:


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? <head>
? ? ? <script language="javascript">
? ? ? ? ? alert("hello!!!");
? ? ? </script>
? </head>


? <body onLoad="showMessage()">
? ? ? <h1>在頁面加載之前,會輸出一些信息</h1>
? </body>
</html>
執行后,確實是“在頁面加載前,輸出了信息”。
2.下面的例子會出現document.getElementById為空的情況。
我的計劃是:在頁面加載時,在<body></body>的文本框中顯示由后臺處理來的數據,比如這里的字符串


“hello, my friend!”。但是這里通過通過document.getElementById讀取的是對象為空。
因為onLoad方法在頁面<body></body>加載之前執行,此時id="mes"對應文本框的文本框,還沒有加載進


去。


代碼如下:


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? <head>
? ? ? <script language="javascript">
? ? ? ? ? var t=document.getElementById("mes");
? ? ? ? ? t.value="hello, my friend!"
? ? ? </script>
? </head>


? <body onLoad="showMessage()">
? ? ? the message is:<input type="text" id="mes">
? </body>
</html>
3.解決辦法
在加載Html網頁時,會加載<html></html>中的所以數據。先加載<head>,再加載<body>。
所以我們可在</body>之后,在</html>之前寫入javascript就好了。程序順序執行,執行到相應的


javascript調用就可以執行。不是用onLoad方法。
代碼如下:


代碼如下:


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? ? <body>?
? ? ? ? ? the message is:<input type="text" id="mes">
? ? </body>


? ? ? <!-- 繼續執行javascript代碼 -->
? ? <script language="javascript">
? ? ? ? ? function showMessage()
? ? ? ? ? {
? ? ? ? ? ? ? var t=document.getElementById("mes");
? ? ? ? ? ? ? t.value="hello, my friend!"
? ? ? ? ? }
? ? ? ? ? showMessage(); ? ?//調用方法,更新文本框
? ? ? </script>
</html>
========

document.getElementById獲取不到值的原因



HTML DOM 定義了多種查找元素的方法,除了 getElementById() 之外,還有 getElementsByName() 和?


getElementsByTagName()。


?HTML DOM 定義了多種查找元素的方法,除了 getElementById() 之外,還有 getElementsByName() 和?


getElementsByTagName()。
不過,如果您需要查找文檔中的一個特定的元素,最有效的方法是 getElementById()。
在操作文檔的一個特定的元素時,最好給該元素一個 id 屬性,為它指定一個(在文檔中)唯一的名稱


,然后就可以用該 ID 查找想要的元素。
需求,就可以想到利用GET傳值的方式,但常規GET方式需要把鏈接寫入標簽的a href里面,而我們實際


上是希望用按鈕來進行點擊,而不是一個簡單的超鏈接形式。于是這里就得用到Javascript在按鈕的


onclick事件下寫代碼。很明白,就是將input的value(用戶輸入的頁碼)傳到onclick的代碼里,這里用


javascript的location來完成跳轉。
? ? 好了,整體就是這個樣子,至于getElementById這個方法我就不多說了。重點說說我遇到的問題以


及如何解決的。
1.Javascript本身不會報錯,只要不出你預期的結果,那么代碼肯定是有問題的。這個時候可以看看代


碼里的符號,比如說單引號、雙引號、大括號、小括號等等...因為這段代碼不是直接在JS文件中寫的,


而是用PHP進行構造來輸出的,再加上PHP本身輸出需要用到單引號、雙引號,所以這個時候很多符號混


合在一起是很容易出錯。不要緊,你可以先運行一下,然后再查看網頁源代碼來看看當前的Javascript


到底是不是你需要的那一段,看到少了什么符號我們就立馬給補上,不過這個時候還需要注意一點,如


果要直接輸出單引號、雙引號的話,在PHP的代碼里這里需要用‘’來進行轉義。
2.上面的問題一般是不會彈出任何結果的,即使我們用alert來查看設置的變量,因為Javascript代碼存


在問題,它根本就沒辦法執行!假設你已經改正了語法上的錯誤,那么我們繼續看...我們可以用以下代


碼來獲取用戶輸入的頁碼,并打印輸出看看正確與否。
?
?代碼如下 復制代碼
var uPage=document.getElementById('pa').value; alert(uPage);
?如果這個時候一直彈出"undefined"的提示,那么至少說明你的Javascript代碼正確運行了,它沒有語


法上的錯誤!至于為什么undefined,我調試了很久都沒找出原因,后來無意中嘗試把value改成


innerHTML,居然打印出了一些結果,不過仔細一看才知道打印出的是一個同id名的div中的內容,這下


才恍然大悟...在分頁類中直接給input標簽的id取名為page了,而這個page我在其他的div中也使用了。


于是將分頁類中input的id改為一個很變態的名字。其實這個時候就應該注意到這些問題,如果我們的代


碼可能會提供給其他人使用,那么命名就很重要了,如果只是在內部(就比如說我這里input這個標簽只


在類里面使用),那么名字應該盡量取得復雜一些,這樣它與用戶的命名發生沖突的可能性就很小了。
? ? ?最后:
?代碼如下 復制代碼
document.getElementById('idname').value;//獲取input標簽里的值,value;?


document.getElementById('idname').innerHTML;//獲取div里的html內容 ?
參考資料:
1. document . getElementById 的用法和 DHTML.CHM 的下載地址
今天在網絡上查找 document . getElementById 的用法,如下:
A : ? ? ?語法:
? ? ?oElement = document . getElementById ( sID )
? ? ? 參數:
? ? ?sID ? : 必選項。字符串 (String) 。
? ? ? 返回值:
? ? ?oElement ? : 對象 (Element) 。
? ? ? 說明:
? ? ? 根據指定的 id 屬性值得到對象。返回 id 屬性值等于 sID 的第一個對象的引用。假如對應的為


一組對象 ? ? ? ,則返回該組對象中的第一個。
? ? ? 如果無符合條件的對象,則返回 null 。
?
B :有一個例子可以很好的說明:
?
? ?****************************************************************************
? ?* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *
? ?* ? 這個函數中最關鍵的地方是 document.getElementById ,他是什么呢? ? ? ? ?*
? ?* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *
? ?* ? 關于 document.getElementById ,是這樣的: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?*
? ?* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *
? ?* ? 如: document.getElementById('hdrPageHeader_lblTitle') ? ? ? ? ? ? ? *
? ?* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *
? ?* ? 表示的意思是:獲取 ID 為 :hdrPageHeader_lblTitle 的對象 ? ? ? ? ? ? ? ? ?*
? ?* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *
? ?* <a >aa</a> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?*
? ?* <a >bb</a> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *
? ?* <a >cc</a> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?*
? ?* <script language="javascript"> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?*
? ?* <!-- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?*
? ?* var idtext=document.getElementById('hdrPageHeader_lblTitle') ? ? ? ?*
? ?* alert(idtext.innerText) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *
? ?* //--> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *
? ?* </script> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *
??
C :另外還得到一個細節:
① document.getElementById 有時會抓 name 放過了 id ,據說是 IE 的一個 BUG ;
頁面中有
? ? ?<input type="hidden" value="2" />
? ? ? ? ? <select ? ? >
一個是 一個是
用 document.getElementById 取第二個,可是,取到的卻是第一個 >
在 IE 中 getElementById 竟然不是先抓 id 而是先找 name 相同的物件 ...
??? form, 每?? form 有??? textbox, ??? form 中的 textbox 是相同的 name, 但 id 都不同 ...
??釉 Firefox 是?]???的 ... 但在 IE ?s只抓得到第一??出?的 name ?料
========

js判斷document.getElementByid("")獲得的對象是否存在



document.getElementByIdx_x("")如果獲得的對象不存在,進行操作時會報錯。因此需要判斷該對象是


否存在,以下2種方法,
推薦使用第一種
方法一:
var v;
v = document.getElementByIdx_x( "id ");
if(v==null){
//不存在,錯誤處理
}else{
//存在,正常處理
}
方法二:
if (typeof(obj) == "undefined") {
? ? ?//不存在,錯誤處理
}else{
//存在,正常處理
}
========

一行代碼告別document.getElementById



絕大多數的腳本里,都是直接通過元素的id來訪問DOM的。?
  ?
  后來隨著各種瀏覽器接踵而至,逐漸的替代了ie。為了保證各路門派統一規則,標準化越來越被重


視。當初那種直接訪問id的方法,逐漸被document.getElementById所替代。如果這年頭還在用id訪問元


素,要么就是做程序里的內嵌網頁,要么就是像鐵道部那樣的超境界仿古網站:) 當然只要保證你的用


戶都是用ie訪問,這樣的非標準也但用無妨。?
  ?
  然而,很多第三方瀏覽器剛出來的時候,為了保證能與當時大量的非標準頁面兼容,都保留了用id


訪問DOM這一非標準做法。事實上如今的主流瀏覽器,只有FireFox不支持這種做法,而


Chrome,Opera,Safari,Mobile Safari都支持。?
  ?
  既然如此,我們不如讓FireFox也支持,這樣所有的瀏覽器都可以直接用id直接訪問DOM,不僅快捷


方便,減少了累贅的代碼,更能提升運行的效率。?
  ?
  實現很簡單,文檔載入完成后查詢帶有id屬性的元素,然后在window對象里添加其引用:?


代碼如下:
var list = document.querySelectorAll('[id]');?
for(var i = 0; i < list.length; i++)?
{?
if(list[i].id)?
window[list[i].id] = list[i];?
}?


當然,只有FF需要這個hack,所以我們先檢測下是否有其特征。最后精簡下代碼,利用數組遍歷回調,


即可壓縮到簡單的一行:?


代碼如下:
<script>?
if('mozHidden' in document) [].forEach.call(document.querySelectorAll('[id]'),function(k)


{this[k.id]=k});?
</script>?


  不過有個值得注意的地方,在文檔載入尚未完成前 querySelectorAll,只能查詢當前<script>之前


的元素。所以以上代碼必須放在文檔的末尾。而使用id訪問,也必須在文檔載入完成之后,否則就可能


找不到這個元素。下面是個測試頁面,在所有瀏覽器下都通過:?


代碼如下:
<!DOCTYPE html>?
<html>?
<head>?
<title>No document.getElementById</title>?
</head>?
<body>?
<div id="mytag"></div>?
<script>?
onload = function()?
{?
mytag.innerHTML = "Goodbye, document.getElementById!";?
}?
</script>?
<script>?
if('mozHidden' in document) [].forEach.call(document.querySelectorAll('[id]'),function(e)


{self[e.id]=e});?
</script>?
</body>?
</html>?


========

各瀏覽器對document.getElementById等方法的實現差異解析

所有Web前端同仁對 document.getElementById 都非常熟悉了。開發過程中經常需要用其獲取頁面id為


xx的元素,自從元老級JS庫Prototype流行后,都喜歡這么簡寫它


代碼如下:
// 方式1?
function $(id){ return document.getElementById(id); }?


有沒有人想過為什么要這么寫,而不用下面的方式寫呢?


代碼如下:
// 方式2?
var $ = document.getElementById;?


這么寫的$更簡潔啊,也很明了,將document的方法getElementById賦值給變量$,用$去獲取頁面id為xx


的元素。實際上方式2在IE6/7/8中是可行的(IE9中有些變動),Firefox/Safari/Chrome/Opera則行不


通。還請自行測試。


為什么Firefox/Safari/Chrome/Opera 方式2獲取就不行呢,原因是這些瀏覽器中getElementById方法內


部實現中需依賴this(document),IE則不需要this。或者說方式2在Firefox/Safari/Chrome/Opera中調


用時說丟失了this,以下是個簡單示例




代碼如下:
// 定義一個函數show?
function show(){alert(this.name);}?


// 定義一個p對象,有name屬性?
var p = {name:'Jack'};?


show.call(p); // -> 'Jack'?
show(); // -> ''?
show.call(null); // -> ''<BR>?


可以看到show的實現中依賴this(簡單說方法體中使用了this),因此調用時的環境(執行上下文)如


果沒有name屬性,則得不到期望的結果。
換句話說,IE6/7/8實現document.getElementById時沒有用到this,而?


IE9/Firefox/Safari/Chrome/Opera 需要用到this,這里的this正是document對象。直接調用方式2時內


部的 this卻是window對象,所以造成方式2在 Firefox/Safari/Chrome/Opera 不能根據id來正常獲取元


素。


如果將document.getElementById的 執行環境換成了document而非window,則可以正常的使用$了。如下




代碼如下:
// 修復document.getElementById?
document.getElementById = (function(fn){?
? ? return function(){ ?
? ? ? ? return fn.apply(document,arguments);?
? ? };?
})(document.getElementById);?


// 修復后賦值給$,$可正常使用了?
var $ = document.getElementById;?


再次,ECMAScript5 中為function新增的 bind 方法可以實現同樣的效果?


代碼如下:
// 方式3?
var $ = document.getElementById.bind(document);?


但目前方式3只有IE9/Firefox/Chrome/支持。


分析了getElementById的情況,下面的一些方法在各瀏覽器中的差異原因就很好明白了?




代碼如下:
var prinf = document.write;?
prinf('<h3>Test prinf</h3>'); // IE6/7/8可運行,其它瀏覽器報錯?


var prinfln = document.writeln;?
prinfln('<h3>Test prinfln</h3>'); // IE6/7/8可運行,其它瀏覽器報錯?


var reload = location.reload;?
reload(); // IE6/7/8可運行,其它瀏覽器報錯?


var go = history.go; ?
go(-2); // IE6/7/8可運行,其它瀏覽器報錯?


========

js中document.getElementByid、document.all和document.layers區分介紹

document.all是IE 4.0及以上版本的專有屬性,是一個表示當前文檔的所有對象的婁組,不僅包括頁面


上可見的實體對象,還包括一些不可見的對象,比如html注釋等等。在document.all數組里面,元素不


分層次,是按照其在文檔中出現的先后順序,平行地羅列的。所以可以用數字索引來引用到任何一個元


素。但比較常用的是用對象id來引用一個特定的對象,比如document.all["element"]這樣。?
document.layers是Netscape 4.x專有的屬性,是一個代表所有由儲如<div><layer>等定位了的元素的數


組。通常也是用<div>或<layer>對象的id屬性來引用的,但是這里面不包含除此以外的其它元素。?
其實這兩個屬性沒什么可比性,大概你經常看到他們同時出時,這有一個歷史原因。在第四代瀏覽器出


現的時候,標準相當混亂,Netscape和微軟分別推出了它們的Navigator 4.x和IE 4.0,這兩個瀏覽器的


巨大差異,也使開發者面臨了一個使網頁跨瀏覽器兼容的噩夢。而document.layer和document.all分別


是兩者一個最顯著的標志,為了確定瀏覽者使用的什么瀏覽器,通常用是否存在document.layers和


document.all來判斷。?
新的統一的標準用document.getElementById等系列方法來引用DOM對象,而且Netscape 6.0以后放棄了


layers特征,雖然IE繼續保留了document.all,但這最終沒有成為DOM標準的一部分。希望


document.layers和document.all能夠早日作古,讓標準早日深入人心!?
代碼示例:?


代碼如下:
<script language="JavaScript">?
function showtime()?
{?
var GetTime=newDate(); //獲取當前日期?
var Years=GetTime.getYear(); // 取當前日期的年?
var Months=GetTime.getMongh();// 取當前日期的月?
var Days=GetTime.getDate();// 取當前日期的日?
var Hours=GetTime.getHours();// 取當前日期的小時?
var Minutes=GetTime.getMinutes();// 取當前日期的分鐘?
var Seconds=GetTime.getSeconds();// 取當前日期的秒?
var Dn='AM';?
if(Hours<=9) //小時少于9時,前面加0,?
{?
Hours='0'+Hours;?
}?
if(Hours==0||Hours>12)?
{?
Dn='PM'; //小時大于12或0時,設為PM(下午)?
}?
if(Minutes<=9)?
{?
Minutes='0'+Minutes;?
}?
if(Seconds<=9)?
{?
Seconds='0'+Seconds;//秒少于9時,前面加0,?
}?
NowTime=Years+'年'+Months+'月'+Days+'日 '+Hours+':'+Minutes+':'+Seconds+''+Dn; //當前日期的


字符串?
if(document.layers){ //不同瀏覽器下, 將當前日期的字符串顯示出來.?
document.layers.liveclock.document.write(NowTime)?
document.layers.liveclock.document.close()?
}?
else if(document.all)?
liveclock.innerHTML=NowTime?
setTimeout('showtime()',1000) //每秒運行showtime函數一次,?
}?


document.all是IE下面的document屬下的所有元素的集合?
可以通過document.all.length來看到document下面的元素數量?
document.all(index)后面的index參數是一個集合方法?
如果index是string那么可以獲得document下面具有id或name為index的元素 如果只有一個的元素話返回


這個元素 如果有多個元素id或name是index的話就返回一個集合 如果沒有的話就返回null?
這樣并不好 因為當你不知道有多少個id或name是index的元素時 就比較容易出錯.?
如果index是數字的話 那么會返回以0為基礎的 文檔中第index個元素. 元素的文檔序列可以通過


Element.sourceIndex來獲取?
document.getElementById(name) 只返回第一個具有id或name為name的元素 所以不是null就是一個元素?


而不會返回集合 這樣就大大減少了錯誤發生的可能性?
如果需要返回一個id或name為name的元素集合的話 就要用 document.getElementsByName(name)來獲取?
document.getElementById?
返回 ID 屬性值與指定值相同的第一個對象,如果 ID 屬于一個集合,getElementById 方法返回集合中


的第一個對象。?
document.all?
如果 ID 屬于一個集合,document.all返回一個集合。而且只支持IE。?
所以在使用IE的前提下,document.all(index)要生效需要保證index是唯一的?
所以如果你想讓你寫的js腳本在目前的大多瀏覽器中使用,需要使用[公共標準] 標準的Javascript?


========



總結

以上是生活随笔為你收集整理的document.getElementById 学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩精品一区二区三区蜜桃 | 欧美视频在线观看视频 | av一级| 奇米影视第四色首页 | 天天插天天色 | 超碰超碰97 | 国产女主播自拍 | 日韩精品在线视频免费观看 | 国产天天操| av不卡一区二区三区 | 国内精久久久久久久久久人 | 日韩激情在线 | 丁香花激情网 | 亚洲国产影院 | 奇米影视7777| 欧美美女在线观看 | 色综合视频网 | 国产一区二区视频免费 | 日本一区二区视频免费 | 亚洲三页 | 日韩一级片免费看 | 成人在线午夜 | 成人免费视 | 国产成人精品一区二区无码呦 | 欧美午夜精品一区二区 | 不卡影院 | 亚洲一区精品在线观看 | 日本打屁股网站 | 中文字幕精品无码亚 | 久久激情婷婷 | 9191久久 | 玖玖国产| 97夜夜操| 日本乱码一区 | 成人免费在线电影 | 亚洲国产视频在线观看 | 911精品国产一区二区在线 | 午夜激情网址 | 91视频免费 | 男女无遮挡做爰猛烈视频 | 日本55丰满熟妇厨房伦 | 麻豆传媒在线观看 | a网站在线观看 | 亚洲最新av在线 | 色呦呦在线视频 | 在线不卡毛片 | 日韩网站免费观看高清 | 日本大尺度吃奶做爰视频 | 亚洲成人第一 | 久久精品无码一区二区三区毛片 | 精品无码一区二区三区爱欲 | 亚洲久久久久久 | 91亚洲天堂 | 黄色免费视频网站 | 好爽…又高潮了毛片免费看 | 免费一级a毛片 | 久久久久久久久久久99 | 疯狂伦交 | 国产91边播边对白在线 | 久久久久久国产精品三级玉女聊斋 | 欧美性一级片 | 干爹你真棒插曲mv在线观看 | 男人透女人免费视频 | 日韩av专区片 | 婷婷综合另类小说色区 | 绿帽视频 | 久久精品99久久久久久久久 | 成人a毛片| 欧美一区二区三区电影 | 狠狠干在线视频 | 国产全肉乱妇杂乱视频 | 精品在线播放 | 中文字幕亚洲欧美日韩在线不卡 | 手机av免费在线观看 | 2019最新中文字幕 | 精品播放 | 欧美大尺度视频 | 国产精品久久久999 www日本高清视频 | 曰本黄色片 | 美女脱得一干二净 | 亚洲人妻一区二区 | 国产99精品视频 | 亚洲精品一区二三区 | 伊人春色视频 | 国产在线精品一区二区三区 | 亚洲一卡二卡在线观看 | 成人欧美一区二区三区黑人冫 | 成年人在线免费 | 中文字幕av播放 | 久草大| 欧美久久一区二区 | 一级片小视频 | 男女日批免费视频 | 美女隐私无遮挡免费 | 午夜九九| 日韩亚洲视频 | 台湾chinesehdxxxx少妇 | 1000部啪啪未满十八勿入 | 精品交短篇合集 |