JavaScript

更新DOM

  • 修改innerHTML屬性
  • 修改innerText或textContent屬性,這樣可以自動(dòng)對(duì)字符串進(jìn)行HTML編碼抵拘,保證無(wú)法設(shè)置任何HTML標(biāo)簽.

兩者的區(qū)別在于讀取屬性時(shí)茫多,innerText不返回隱藏元素的文本,而textContent返回所有文本。另外注意IE<9不支持textContent。

修改CSS也是經(jīng)常需要的操作。DOM節(jié)點(diǎn)的style屬性對(duì)應(yīng)所有的CSS系馆,可以直接獲取或設(shè)置。因?yàn)镃SS允許font-size這樣的名稱顽照,但它并非JavaScript有效的屬性名由蘑,所以需要在JavaScript中改寫(xiě)為駝峰式命名fontSize

插入DOM

  • 若DOM節(jié)點(diǎn)為空,可直接使用innerHTML=''則可修改DOM節(jié)點(diǎn)內(nèi)容代兵,相當(dāng)于插入了新的DOM
  • 使用appendChild,把一個(gè)子節(jié)點(diǎn)添加到父節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn)尼酿。若該添加的子節(jié)點(diǎn)已經(jīng)存在在當(dāng)前文檔樹(shù)的話,該節(jié)點(diǎn)會(huì)首先從原來(lái)的位置刪除植影,再插入到新位置裳擎。使用createElement()
  • insertBefore
    parentElement.insertBefore(newElement, referenceElement);子節(jié)點(diǎn)會(huì)插入到referenceElement之前。

刪除DOM

要?jiǎng)h除一個(gè)節(jié)點(diǎn)思币,首先要獲得該節(jié)點(diǎn)本身以及它的父節(jié)點(diǎn)鹿响,然后,調(diào)用父節(jié)點(diǎn)的removeChild把自己刪掉
當(dāng)你遍歷一個(gè)父節(jié)點(diǎn)的子節(jié)點(diǎn)并進(jìn)行刪除操作時(shí)谷饿,要注意惶我,children
屬性是一個(gè)只讀屬性,并且它在子節(jié)點(diǎn)變化時(shí)會(huì)實(shí)時(shí)更新博投。

parent.removeChild(parent.children[0]);

操作表單

  • 獲取值
    若獲得了一個(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判斷.

  • 設(shè)置值

    • 對(duì)于text筷厘、password鸣峭、hidden以及select,直接設(shè)置value就可以酥艳。
    • 對(duì)于單選框和復(fù)選框摊溶,設(shè)置checked為true或false即可。
  • 提交表單

沒(méi)有name屬性的<input>的數(shù)據(jù)不會(huì)被提交

File API(這一塊還不怎么懂)

HTML5的File API提供了File和FileReader兩個(gè)主要對(duì)象充石,可以獲得文件信息并讀取文件莫换。

var fileInput = document.getElementById('test-image-file'), 
       info = document.getElementById('test-file-info'),
       preview = document.getElementById('test-image-preview');
// 監(jiān)聽(tīng)change事件:
fileInput.addEventListener('change', function () { 
// 清除背景圖片: 
    preview.style.backgroundImage = ''; 
// 檢查文件是否選擇:
     if (!fileInput.value) { info.innerHTML = '沒(méi)有選擇文件'; 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è)字符串骤铃,類(lèi)似于data:image/jpeg;base64,/9j/4AAQSk...(base64編碼)...拉岁,常用于設(shè)置圖像。如果需要服務(wù)器端處理惰爬,把字符串base64,后面的字符發(fā)送給服務(wù)器并用Base64解碼就可以得到原始文件的二進(jìn)制內(nèi)容喊暖。

回調(diào)

在JavaScript中,瀏覽器的JavaScript執(zhí)行引擎在執(zhí)行JavaScript代碼時(shí)撕瞧,總是以單線程模式執(zhí)行陵叽,也就是說(shuō),任何時(shí)候丛版,JavaScript代碼都不可能同時(shí)有多于1個(gè)線程在執(zhí)行巩掺。
在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)容栓撞。

AJAX

注意:AJAX請(qǐng)求是異步執(zhí)行的,也就是說(shuō)碗硬,要通過(guò)回調(diào)函數(shù)獲得響應(yīng)瓤湘。

用JavaScript請(qǐng)求外域(就是其他網(wǎng)站)的URL

  • 一是通過(guò)Flash插件發(fā)送HTTP請(qǐng)求,這種方式可以繞過(guò)瀏覽器的安全限制恩尾,但必須安裝Flash弛说,并且跟Flash交互。不過(guò)Flash用起來(lái)麻煩翰意,而且現(xiàn)在用得也越來(lái)越少了木人。
  • 二是通過(guò)在同源域名下架設(shè)一個(gè)代理服務(wù)器來(lái)轉(zhuǎn)發(fā)信柿,JavaScript負(fù)責(zé)把請(qǐng)求發(fā)送到代理服務(wù)器
  • 第三種方式稱為JSONP,它有個(gè)限制醒第,只能用GET請(qǐng)求渔嚷,并且要求返回JavaScript。這種方式跨域?qū)嶋H上是利用了瀏覽器允許跨域引用JavaScript資源
  • CORS是HTML5規(guī)范定義的如何跨域訪問(wèn)資源

Origin表示本域稠曼,也就是瀏覽器當(dāng)前頁(yè)面的域形病。當(dāng)JavaScript向外域(如sina.com)發(fā)起請(qǐng)求后,瀏覽器收到響應(yīng)后霞幅,首先檢查Access-Control-Allow-Origin
是否包含本域漠吻,如果是,則此次跨域請(qǐng)求成功司恳,如果不是途乃,則請(qǐng)求失敗,JavaScript將無(wú)法獲取到響應(yīng)的任何數(shù)據(jù)抵赢。


假設(shè)本域是my.com欺劳,外域是sina.com,只要響應(yīng)頭Access-Control-Allow-Originhttp://my.com铅鲤,或者是*划提,本次請(qǐng)求就可以成功。
可見(jiàn)邢享,跨域能否成功鹏往,取決于對(duì)方服務(wù)器是否愿意給你設(shè)置一個(gè)正確的Access-Control-Allow-Origin,決定權(quán)始終在對(duì)方手中骇塘。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伊履,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子款违,更是在濱河造成了極大的恐慌唐瀑,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件插爹,死亡現(xiàn)場(chǎng)離奇詭異哄辣,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)赠尾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)力穗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人气嫁,你說(shuō)我怎么就攤上這事当窗。” “怎么了寸宵?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵崖面,是天一觀的道長(zhǎng)元咙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)嘶朱,這世上最難降的妖魔是什么蛾坯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮疏遏,結(jié)果婚禮上脉课,老公的妹妹穿的比我還像新娘。我一直安慰自己财异,他們只是感情好倘零,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著戳寸,像睡著了一般呈驶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疫鹊,一...
    開(kāi)封第一講書(shū)人閱讀 52,246評(píng)論 1 308
  • 那天袖瞻,我揣著相機(jī)與錄音,去河邊找鬼拆吆。 笑死聋迎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的枣耀。 我是一名探鬼主播霉晕,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捞奕!你這毒婦竟也來(lái)了牺堰?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤颅围,失蹤者是張志新(化名)和其女友劉穎伟葫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體院促,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筏养,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了一疯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夺姑,死狀恐怖墩邀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盏浙,我是刑警寧澤眉睹,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布荔茬,位于F島的核電站,受9級(jí)特大地震影響竹海,放射性物質(zhì)發(fā)生泄漏慕蔚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一斋配、第九天 我趴在偏房一處隱蔽的房頂上張望孔飒。 院中可真熱鬧,春花似錦艰争、人聲如沸坏瞄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸠匀。三九已至,卻和暖如春逾柿,著一層夾襖步出監(jiān)牢的瞬間缀棍,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工机错, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爬范,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓毡熏,卻偏偏與公主長(zhǎng)得像坦敌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子痢法,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 主要源于廖雪峰老師的JavaScript教程 瀏覽器 1. 簡(jiǎn)介 注意IE瀏覽器狱窘,別的支持的都挺好。IE 6~11...
    ynchai閱讀 491評(píng)論 0 2
  • JavaScript 快速入門(mén) 瀏覽器瀏覽器對(duì)象操作 DOM插入 DOM刪除 DOM 操作表單獲取值設(shè)置值HTML...
    染微言閱讀 1,656評(píng)論 0 5
  • @轉(zhuǎn)自GitHub 介紹js的基本數(shù)據(jù)類(lèi)型财搁。Undefined蘸炸、Null、Boolean尖奔、Number搭儒、Strin...
    YT_Zou閱讀 1,162評(píng)論 0 0
  • JavaScript的組成 JavaScript 由以下三部分組成:ECMAScript(核心):JavaScri...
    紋小艾閱讀 3,231評(píng)論 0 3
  • 作為一個(gè)生活經(jīng)歷太過(guò)平凡的書(shū)癡,讀書(shū)成了貫穿我生活的一條線索提茁。初中的時(shí)候淹禾,姐姐帶回家的一本《哈克.貝里.費(fèi)恩歷...
    萇丹顏閱讀 1,022評(píng)論 11 14