淺談JavaScript 瀏覽器對(duì)象
window
window對(duì)象不但充當(dāng)全局作用域,而且表示瀏覽器窗口。
window對(duì)象有innerWidth和innerHeight屬性,可以獲取瀏覽器窗口的內(nèi)部寬度和高度。內(nèi)部寬高是指除去菜單欄、工具欄、邊框等占位元素后,用于顯示網(wǎng)頁(yè)的凈寬高。還有一個(gè)outerWidth和outerHeight屬性,可以獲取瀏覽器窗口的整個(gè)寬高。
補(bǔ)充:
網(wǎng)頁(yè)可見區(qū)域?qū)挘篸ocument.body.clientWidth 網(wǎng)頁(yè)可見區(qū)域高:document.body.clientHeight 網(wǎng)頁(yè)可見區(qū)域?qū)挘篸ocument.body.offsetWidth (包括邊線和滾動(dòng)條的寬) 網(wǎng)頁(yè)可見區(qū)域高:document.body.offsetHeight (包括邊線的寬) 網(wǎng)頁(yè)正文全文寬:document.body.scrollWidth 網(wǎng)頁(yè)正文全文高:document.body.scrollHeight 網(wǎng)頁(yè)被卷去的高:document.body.scrollTop 或者 jQuery(document).scrollTop() 網(wǎng)頁(yè)被卷去的左:document.body.scrollLeft 網(wǎng)頁(yè)正文部分上:window.screenTop 網(wǎng)頁(yè)正文部分左:window.screenLeft 屏幕分辨率的高:window.screen.height 屏幕分辨率的寬:window.screen.width 屏幕可用工作區(qū)高度:window.screen.availHeight 屏幕可用工作區(qū)寬度:window.screen.availWidth 屏幕彩色位數(shù): window.screen.colorDepth 屏幕像素/英寸比例: window.screen.deviceXDPI 瀏覽器窗口的高度: $(window).height() 瀏覽器窗口的寬度: $(window).width()
特殊1: document.body.scrollTop總為0的解決方法 var scrollPos; if (typeof window.pageYOffset != 'undefined') { scrollPos = window.pageYOffset; } else if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') { scrollPos = document.documentElement.scrollTop; } else if (typeof document.body != 'undefined') { scrollPos = document.body.scrollTop; } alert(scrollPos ); 特殊2: 網(wǎng)頁(yè)正文全文寬:"+ document.body.scrollWidth; 網(wǎng)頁(yè)正文全文高:"+ document.body.scrollHeight; 以上函數(shù)有時(shí)獲取不了,就用以下方法。 var xScroll, yScroll; if (window.innerHeight && window.scrollMaxY) { xScroll = document.body.scrollWidth; yScroll = window.innerHeight + window.scrollMaxY; } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac xScroll = document.body.scrollWidth; yScroll = document.body.scrollHeight; } else { //Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari xScroll = document.body.offsetWidth; yScroll = document.body.offsetHeight; }
navigator
navigator對(duì)象表示瀏覽器的信息,最常用的屬性包括:
•navigator.appName:瀏覽器名稱;
•navigator.appVersion:瀏覽器版本;
•navigator.language:瀏覽器設(shè)置的語(yǔ)言;
•navigator.platform:操作系統(tǒng)類型;
•navigator.userAgent:瀏覽器設(shè)定的User-Agent字符串。
初學(xué)者為了針對(duì)不同瀏覽器編寫不同的代碼,喜歡用if判斷瀏覽器版本,例如:
var width; if (getIEVersion(navigator.userAgent) < 9) { width = document.body.clientWidth; } else { width = window.innerWidth; }
但這樣既可能判斷不準(zhǔn)確,也很難維護(hù)代碼。正確的方法是充分利用JavaScript對(duì)不存在屬性返回undefined
的特性,直接用短路運(yùn)算符||
計(jì)算:
var width = window.innerWidth || document.body.clientWidth;
screen
screen對(duì)象表示屏幕的信息,常用的屬性有:
•screen.width:屏幕寬度,以像素為單位;
•screen.height:屏幕高度,以像素為單位;
•screen.colorDepth:返回顏色位數(shù),如8、16、24。
location
location對(duì)象表示當(dāng)前頁(yè)面的URL信息。例如,一個(gè)完整的URL:
http://www.example.com:8080/path/index.html?a=1&b=2#TOP
可以用location.href
獲取。要獲得URL各個(gè)部分的值,可以這么寫:
location.protocol; // 'http' location.host; // 'www.example.com' location.port; // '8080' location.pathname; // '/path/index.html' location.search; // '?a=1&b=2' location.hash; // 'TOP'
要加載一個(gè)新頁(yè)面,可以調(diào)用location.assign()。如果要重新加載當(dāng)前頁(yè)面,調(diào)用location.reload()方法非常方便。
document
document對(duì)象表示當(dāng)前頁(yè)面。由于HTML在瀏覽器中以DOM形式表示為樹形結(jié)構(gòu),document對(duì)象就是整個(gè)DOM樹的根節(jié)點(diǎn)。
document的title屬性是從HTML文檔中的<title>xxx</title>讀取的,但是可以動(dòng)態(tài)改變:
document對(duì)象還有一個(gè)cookie屬性,可以獲取當(dāng)前頁(yè)面的Cookie。
Cookie是由服務(wù)器發(fā)送的key-value標(biāo)示符。因?yàn)镠TTP協(xié)議是無(wú)狀態(tài)的,但是服務(wù)器要區(qū)分到底是哪個(gè)用戶發(fā)過(guò)來(lái)的請(qǐng)求,就可以用Cookie來(lái)區(qū)分。當(dāng)一個(gè)用戶成功登錄后,服務(wù)器發(fā)送一個(gè)Cookie給瀏覽器,例如user=ABC123XYZ(加密的字符串)...,此后,瀏覽器訪問(wèn)該網(wǎng)站時(shí),會(huì)在請(qǐng)求頭附上這個(gè)Cookie,服務(wù)器根據(jù)Cookie即可區(qū)分出用戶。
Cookie還可以存儲(chǔ)網(wǎng)站的一些設(shè)置,例如,頁(yè)面顯示的語(yǔ)言等等。
JavaScript可以通過(guò)document.cookie讀取到當(dāng)前頁(yè)面的Cookie:
document.cookie; // 'v=123; remember=true; prefer=zh'
由于JavaScript能讀取到頁(yè)面的Cookie,而用戶的登錄信息通常也存在Cookie中,這就造成了巨大的安全隱患,這是因?yàn)樵贖TML頁(yè)面中引入第三方的JavaScript代碼是允許的:
<!-- 當(dāng)前頁(yè)面在wwwexample.com --> <html> <head> <script src="http://www.foo.com/jquery.js"></script> </head> </html>
如果引入的第三方的JavaScript中存在惡意代碼,則www.foo.com網(wǎng)站將直接獲取到www.example.com網(wǎng)站的用戶登錄信息。
為了解決這個(gè)問(wèn)題,服務(wù)器在設(shè)置Cookie時(shí)可以使用httpOnly,設(shè)定了httpOnly的Cookie將不能被JavaScript讀取。這個(gè)行為由瀏覽器實(shí)現(xiàn),主流瀏覽器均支持httpOnly選項(xiàng),為了確保安全,服務(wù)器端在設(shè)置Cookie時(shí),應(yīng)該始終堅(jiān)持使用httpOnly。
document.write() 僅僅向文檔輸出新內(nèi)容
如果在文檔已完成加載后執(zhí)行 document.write,整個(gè) HTML 頁(yè)面將被覆蓋:
參考:http://www.w3school.com.cn/tiy/t.asp?f=js_write_over
DOM | Document
// 返回ID為'test'的節(jié)點(diǎn): var test = document.getElementById('test'); // 獲取節(jié)點(diǎn)test下的所有直屬子節(jié)點(diǎn): var cs = test.children; var first = test.firstElementChild;
第二種方法是使用querySelector()
和querySelectorAll()
,需要了解selector語(yǔ)法,然后使用條件來(lái)獲取節(jié)點(diǎn),更加方便:
// 通過(guò)querySelector獲取ID為q1的節(jié)點(diǎn): var q1 = document.querySelector('#q1'); // 通過(guò)querySelectorAll獲取q1節(jié)點(diǎn)內(nèi)的符合條件的所有節(jié)點(diǎn): var ps = q1.querySelectorAll('div.highlighted > p');
嚴(yán)格地講,我們這里的DOM節(jié)點(diǎn)是指Element,但是DOM節(jié)點(diǎn)實(shí)際上是Node,在HTML中,Node包括Element、Comment、CDATA_SECTION等很多種,以及根節(jié)點(diǎn)Document類型,但是,絕大多數(shù)時(shí)候我們只關(guān)心Element,也就是實(shí)際控制頁(yè)面結(jié)構(gòu)的Node,其他類型的Node忽略即可。根節(jié)點(diǎn)Document已經(jīng)自動(dòng)綁定為全局變量document。
修改Dom
修改CSS也是經(jīng)常需要的操作。DOM節(jié)點(diǎn)的style屬性對(duì)應(yīng)所有的CSS,可以直接獲取或設(shè)置。因?yàn)镃SS允許font-size這樣的名稱,但它并非JavaScript有效的屬性名,所以需要在JavaScript中改寫為駝峰式命名fontSize:
// 獲取<p id="p-id">...</p>var p = document.getElementById('p-id'); // 設(shè)置CSS: p.style.color = '#ff0000'; p.style.fontSize = '20px'; p.style.paddingTop = '2em';
插入DOM
有兩個(gè)辦法可以插入新的節(jié)點(diǎn)。一個(gè)是使用appendChild,把一個(gè)子節(jié)點(diǎn)添加到父節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn)。例如:
<!-- HTML結(jié)構(gòu) --> <p id="js">JavaScript</p> <div id="list"> <p id="scheme">Scheme</p> </div>
把<p id="js">JavaScript</p>
添加到<div id="list">
的最后一項(xiàng):
var js = document.getElementById('js'), list = document.getElementById('list'); list.appendChild(js);
現(xiàn)在,HTML結(jié)構(gòu)變成了這樣:
<!-- HTML結(jié)構(gòu) --><div id="list"> <p id="scheme">Scheme</p> <p id="js">JavaScript</p></div>
因?yàn)槲覀儾迦氲?code>js節(jié)點(diǎn)已經(jīng)存在于當(dāng)前的文檔樹,因此這個(gè)節(jié)點(diǎn)首先會(huì)從原先的位置刪除,再插入到新的位置。
更多的時(shí)候我們會(huì)從零創(chuàng)建一個(gè)新的節(jié)點(diǎn),然后插入到指定位置:
haskell = document.createElement('p');
動(dòng)態(tài)創(chuàng)建一個(gè)節(jié)點(diǎn)然后添加到DOM樹中,可以實(shí)現(xiàn)很多功能。舉個(gè)例子,下面的代碼動(dòng)態(tài)創(chuàng)建了一個(gè)<style>
節(jié)點(diǎn),然后把它添加到<head>
節(jié)點(diǎn)的末尾,這樣就動(dòng)態(tài)地給文檔添加了新的CSS定義:
var d = document.createElement('style'); d.setAttribute('type', 'text/css'); d.innerHTML = 'p { color: red }'; document.getElementsByTagName('head')[0].appendChild(d);
insertBefore
如果我們要把子節(jié)點(diǎn)插入到指定的位置怎么辦?可以使用parentElement.insertBefore(newElement, referenceElement);,子節(jié)點(diǎn)會(huì)插入到referenceElement之前。
很多時(shí)候,需要循環(huán)一個(gè)父節(jié)點(diǎn)的所有子節(jié)點(diǎn),可以通過(guò)迭代children屬性實(shí)現(xiàn):
var i, c, list = document.getElementById('list'); for (i = 0; i < list.children.length; i++) { c = list.children[i]; // 拿到第i個(gè)子節(jié)點(diǎn) }
刪除DOM
要?jiǎng)h除一個(gè)節(jié)點(diǎn),首先要獲得該節(jié)點(diǎn)本身以及它的父節(jié)點(diǎn),然后,調(diào)用父節(jié)點(diǎn)的removeChild把自己刪掉:
// 拿到待刪除節(jié)點(diǎn): var self = document.getElementById('to-be-removed'); // 拿到父節(jié)點(diǎn): var parent = self.parentElement; // 刪除: var removed = parent.removeChild(self); removed === self; // true
注意到刪除后的節(jié)點(diǎn)雖然不在文檔樹中了,但其實(shí)它還在內(nèi)存中,可以隨時(shí)再次被添加到別的位置。
當(dāng)你遍歷一個(gè)父節(jié)點(diǎn)的子節(jié)點(diǎn)并進(jìn)行刪除操作時(shí),要注意,children屬性是一個(gè)只讀屬性,并且它在子節(jié)點(diǎn)變化時(shí)會(huì)實(shí)時(shí)更新。因此,刪除多個(gè)節(jié)點(diǎn)時(shí),要注意children屬性時(shí)刻都在變化。
操作表單
用JavaScript操作表單和操作DOM是類似的,因?yàn)楸韱伪旧硪彩荄OM樹。
不過(guò)表單的輸入框、下拉框等可以接收用戶輸入,所以用JavaScript來(lái)操作表單,可以獲得用戶輸入的內(nèi)容,或者對(duì)一個(gè)輸入框設(shè)置新的內(nèi)容。
HTML表單的輸入控件主要有以下幾種:
•文本框,對(duì)應(yīng)的<input type="text">,用于輸入文本;
•口令框,對(duì)應(yīng)的<input type="password">,用于輸入口令;
•單選框,對(duì)應(yīng)的<input type="radio">,用于選擇一項(xiàng);
•復(fù)選框,對(duì)應(yīng)的<input type="checkbox">,用于選擇多項(xiàng);
•下拉框,對(duì)應(yīng)的<select>,用于選擇一項(xiàng);
•隱藏文本,對(duì)應(yīng)的<input type="hidden">,用戶不可見,但表單提交時(shí)會(huì)把隱藏文本發(fā)送到服務(wù)器。
獲取值
如果我們獲得了一個(gè)<input>節(jié)點(diǎn)的引用,就可以直接調(diào)用value獲得對(duì)應(yīng)的用戶輸入值:
// <input type="text" id="email"> var input = document.getElementById('email'); input.value; // '用戶輸入的值'
這種方式可以應(yīng)用于text
、password
、hidden
以及select
。但是,對(duì)于單選框和復(fù)選框,value
屬性返回的永遠(yuǎn)是HTML預(yù)設(shè)的值,而我們需要獲得的實(shí)際是用戶是否“勾上了”選項(xiàng),所以應(yīng)該用checked
判斷:
// <label><input type="radio" name="weekday" id="monday" value="1"> Monday</label> // <label><input type="radio" name="weekday" id="tuesday" value="2"> Tuesday</label> var mon = document.getElementById('monday'); var tue = document.getElementById('tuesday'); mon.value; // '1' tue.value; // '2' mon.checked; // true或者false tue.checked; // true或者false
設(shè)置值
設(shè)置值和獲取值類似,對(duì)于text、password、hidden以及select,直接設(shè)置value就可以:
// <input type="text" id="email">var input = document.getElementById('email'); input.value = 'test@example.com'; // 文本框的內(nèi)容已更新
對(duì)于單選框和復(fù)選框,設(shè)置checked為true或false即可。
HTML5控件
HTML5新增了大量標(biāo)準(zhǔn)控件,常用的包括date、datetime、datetime-local、color等,它們都使用<input>標(biāo)簽:
<input type="date" value="2015-07-01">
<input type="datetime-local" value="2015-07-01T02:03:04">
<input type="color" value="#ff0000">
不支持HTML5的瀏覽器無(wú)法識(shí)別新的控件,會(huì)把它們當(dāng)做type="text"來(lái)顯示。支持HTML5的瀏覽器將獲得格式化的字符串。例如,type="date"類型的input的value將保證是一個(gè)有效的YYYY-MM-DD格式的日期,或者空字符串。
提交表單
最后,JavaScript可以以兩種方式來(lái)處理表單的提交(AJAX方式在后面章節(jié)介紹)。
方式一是通過(guò)<form>元素的submit()方法提交一個(gè)表單,例如,響應(yīng)一個(gè)<button>的click事件,在JavaScript代碼中提交表單:
<form id="test-form"> <input type="text" name="test"> <button type="button" onclick="doSubmitForm()">Submit</button></form> <script> function doSubmitForm() { var form = document.getElementById('test-form'); // 可以在此修改form的input... // 提交form: form.submit(); }</script>
這種方式的缺點(diǎn)是擾亂了瀏覽器對(duì)form的正常提交。瀏覽器默認(rèn)點(diǎn)擊<button type="submit">
時(shí)提交表單,或者用戶在最后一個(gè)輸入框按回車鍵。因此,第二種方式是響應(yīng)<form>
本身的onsubmit
事件,在提交form時(shí)作修改:
<form id="test-form" onsubmit="return checkForm()"> <input type="text" name="test"> <button type="submit">Submit</button></form> <script> function checkForm() { var form = document.getElementById('test-form'); // 可以在此修改form的input... // 繼續(xù)下一步: return true; } </script>
注意要return true
來(lái)告訴瀏覽器繼續(xù)提交,如果return false
,瀏覽器將不會(huì)繼續(xù)提交form,這種情況通常對(duì)應(yīng)用戶輸入有誤,提示用戶錯(cuò)誤信息后終止提交form。
在檢查和修改<input>
時(shí),要充分利用<input type="hidden">
來(lái)傳遞數(shù)據(jù)。
例如,很多登錄表單希望用戶輸入用戶名和口令,但是,安全考慮,提交表單時(shí)不傳輸明文口令,而是口令的MD5。普通JavaScript開發(fā)人員會(huì)直接修改<input>
:
<form id="login-form" method="post" onsubmit="return checkForm()"> <input type="text" id="username" name="username"> <input type="password" id="password" name="password"> <button type="submit">Submit</button></form> <script> function checkForm() { var pwd = document.getElementById('password'); // 把用戶輸入的明文變?yōu)镸D5: pwd.value = toMD5(pwd.value); // 繼續(xù)下一步: return true; }</script>
這個(gè)做法看上去沒啥問(wèn)題,但用戶輸入了口令提交時(shí),口令框的顯示會(huì)突然從幾個(gè)*
變成32個(gè)*
(因?yàn)镸D5有32個(gè)字符)。
要想不改變用戶的輸入,可以利用<input type="hidden">
實(shí)現(xiàn):
<form id="login-form" method="post" onsubmit="return checkForm()"> <input type="text" id="username" name="username"> <input type="password" id="input-password"> <input type="hidden" id="md5-password" name="password"> <button type="submit">Submit</button></form> <script> function checkForm() { var input_pwd = document.getElementById('input-password'); var md5_pwd = document.getElementById('md5-password'); // 把用戶輸入的明文變?yōu)镸D5: md5_pwd.value = toMD5(input_pwd.value); // 繼續(xù)下一步: return true; }</script>
注意到id為md5-password的<input>標(biāo)記了name="password",而用戶輸入的id為input-password的<input>沒有name屬性。沒有name屬性的<input>的數(shù)據(jù)不會(huì)被提交。
操作文件
在HTML表單中,可以上傳文件的唯一控件就是<input type="file">。
注意:當(dāng)一個(gè)表單包含<input type="file">時(shí),表單的enctype必須指定為multipart/form-data,method必須指定為post,瀏覽器才能正確編碼并以multipart/form-data格式發(fā)送表單的數(shù)據(jù)。
出于安全考慮,瀏覽器只允許用戶點(diǎn)擊<input type="file">來(lái)選擇本地文件,用JavaScript對(duì)<input type="file">的value賦值是沒有任何效果的。當(dāng)用戶選擇了上傳某個(gè)文件后,JavaScript也無(wú)法獲得該文件的真實(shí)路徑:
待上傳文件:
通常,上傳的文件都由后臺(tái)服務(wù)器處理,JavaScript可以在提交表單時(shí)對(duì)文件擴(kuò)展名做檢查,以便防止用戶上傳無(wú)效格式的文件:
var f = document.getElementById('test-file-upload'); var filename = f.value; // 'C:\fakepath\test.png' if (!filename || !(filename.endsWith('.jpg') || filename.endsWith('.png') || filename.endsWith('.gif'))) { alert('Can only upload image file.'); return false; }
File API
由于JavaScript對(duì)用戶上傳的文件操作非常有限,尤其是無(wú)法讀取文件內(nèi)容,使得很多需要操作文件的網(wǎng)頁(yè)不得不用Flash這樣的第三方插件來(lái)實(shí)現(xiàn)。
隨著HTML5的普及,新增的File API允許JavaScript讀取文件內(nèi)容,獲得更多的文件信息。
HTML5的File API提供了File和FileReader兩個(gè)主要對(duì)象,可以獲得文件信息并讀取文件。
下面的例子演示了如何讀取用戶選取的圖片文件,并在一個(gè)<div>中預(yù)覽圖像:
圖片預(yù)覽:
var fileInput = document.getElementById('test-image-file'), info = document.getElementById('test-file-info'), preview = document.getElementById('test-image-preview'); // 監(jiān)聽change事件: fileInput.addEventListener('change', function () { // 清除背景圖片: preview.style.backgroundImage = ''; // 檢查文件是否選擇: if (!fileInput.value) { info.innerHTML = '沒有選擇文件'; return; } // 獲取File引用: var file = fileInput.files[0]; // 獲取File信息: info.innerHTML = '文件: ' + file.name + '<br>' + '大小: ' + file.size + '<br>' + '修改: ' + file.lastModifiedDate; if (file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') { alert('不是有效的圖片文件!'); return; } // 讀取文件: var reader = new FileReader(); reader.onload = function(e) { var data = e.target.result; // 'data:image/jpeg;base64,/9j/4AAQSk...(base64編碼)...' preview.style.backgroundImage = 'url(' + data + ')'; }; // 以DataURL的形式讀取文件: reader.readAsDataURL(file); });
上面的代碼演示了如何通過(guò)HTML5的File API讀取文件內(nèi)容。以DataURL的形式讀取到的文件是一個(gè)字符串,類似于data:image/jpeg;base64,/9j/4AAQSk...(base64編碼)...,常用于設(shè)置圖像。如果需要服務(wù)器端處理,把字符串base64后的字符發(fā)送給服務(wù)器并用Base64解碼就可以得到原始文件的二進(jìn)制內(nèi)容。
回調(diào)
上面的代碼還演示了JavaScript的一個(gè)重要的特性就是單線程執(zhí)行模式。在JavaScript中,瀏覽器的JavaScript執(zhí)行引擎在執(zhí)行JavaScript代碼時(shí),總是以單線程模式執(zhí)行,也就是說(shuō),任何時(shí)候,JavaScript代碼都不可能同時(shí)有多于1個(gè)線程在執(zhí)行。
你可能會(huì)問(wèn),單線程模式執(zhí)行的JavaScript,如何處理多任務(wù)?
在JavaScript中,執(zhí)行多任務(wù)實(shí)際上都是異步調(diào)用,比如上面的代碼:
reader.readAsDataURL(file);
就會(huì)發(fā)起一個(gè)異步操作來(lái)讀取文件內(nèi)容。因?yàn)槭钱惒讲僮鳎晕覀冊(cè)贘avaScript代碼中就不知道什么時(shí)候操作結(jié)束,因此需要先設(shè)置一個(gè)回調(diào)函數(shù):
reader.onload = function(e) { // 當(dāng)文件讀取完成后,自動(dòng)調(diào)用此函數(shù): };
當(dāng)文件讀取完成后,JavaScript引擎將自動(dòng)調(diào)用我們?cè)O(shè)置的回調(diào)函數(shù)。執(zhí)行回調(diào)函數(shù)時(shí),文件已經(jīng)讀取完畢,所以我們可以在回調(diào)函數(shù)內(nèi)部安全地獲得文件內(nèi)容。
以上這篇淺談JavaScript 瀏覽器對(duì)象就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 淺談JavaScript的內(nèi)置對(duì)象和瀏覽器對(duì)象
- JavaScript瀏覽器對(duì)象之一Window對(duì)象詳解
- Js與Jq獲取瀏覽器和對(duì)象值的方法
- 微信瀏覽器內(nèi)置JavaScript對(duì)象WeixinJSBridge使用實(shí)例
- JavaScript Window瀏覽器對(duì)象模型方法與屬性匯總
- JavaScript 瀏覽器對(duì)象模型BOM使用介紹
- javascript history對(duì)象(歷史記錄)使用方法(實(shí)現(xiàn)瀏覽器前進(jìn)后退)
- JavaScript Window瀏覽器對(duì)象模型原理解析
相關(guān)文章
js 獲取html5的data屬性實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇js 獲取html5的data屬性實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07location.hash保存頁(yè)面狀態(tài)的技巧
hash 屬性是一個(gè)可讀可寫的字符串,該字符串是 URL 的錨部分(從 # 號(hào)開始的部分)。接下來(lái)通過(guò)本文給大家介紹location.hash保存頁(yè)面狀態(tài)的相關(guān)內(nèi)容,感興趣的朋友一起學(xué)習(xí)吧2016-04-04非常不錯(cuò)的三種簡(jiǎn)潔的Tab導(dǎo)航(網(wǎng)頁(yè)選項(xiàng)卡)簡(jiǎn)析
非常不錯(cuò)的三種簡(jiǎn)潔的Tab導(dǎo)航(網(wǎng)頁(yè)選項(xiàng)卡)簡(jiǎn)析...2007-08-08jquery自定義插件結(jié)合baiduTemplate.js實(shí)現(xiàn)異步刷新(附源碼)
本文主要介紹了jquery自定義插件結(jié)合baiduTemplate.js實(shí)現(xiàn)異步刷新的具體實(shí)例,具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧2016-12-12JS highcharts動(dòng)態(tài)柱狀圖原理及實(shí)現(xiàn)
這篇文章主要介紹了JS highcharts動(dòng)態(tài)柱狀圖原理及實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10JS實(shí)現(xiàn)的簡(jiǎn)易拖放效果示例
這篇文章主要介紹了JS實(shí)現(xiàn)的簡(jiǎn)易拖放效果的方法,涉及JS事件監(jiān)聽、擴(kuò)展及頁(yè)面元素動(dòng)態(tài)操作的相關(guān)技巧,需要的朋友可以參考下2016-12-12詳解js如何優(yōu)雅處理后端返回的單元格數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了JavaScript如何優(yōu)雅處理后端返回的單元格數(shù)據(jù),文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10js實(shí)現(xiàn)簡(jiǎn)單手風(fēng)琴效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)簡(jiǎn)單手風(fēng)琴效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09