DOM操作

1、 寫一個函數(shù)谢鹊,批量操作 css

function css(node, styleObj){
//todo ..
}
css(document.body, {
  'color': 'red',
  'background-color': '#ccc'
})
function css(node, styleObj){
  for(key in styleObj){
    node.style[key] = styleObj[key]
  }
}
css(document.body, {
  'color': 'red',
  'background-color': '#ccc'
})

2瞳遍、如何獲取 DOM 計算后的樣式

可以使用document.defaultView提供的getComputedStyle()方法。該方法接受兩個參數(shù):需要取得計算樣式的元素和一個偽元素字符串(例":after")。如果不需要偽元素信息壳咕,第二個參數(shù)為null席揽。代碼示例如下:

var node = document.getElementById("test");
var computedStyle = document.defaultView.getComputedStyle(node, null);

console.log(computedStyle.backgroundColor); 
console.log(computedStyle.width);                  
console.log(computedStyle.height);            
console.log(computedStyle.border); 

IE11以前的版本不支持getComputedStyle()方法,不過他提供的另外一個方法可以實(shí)現(xiàn)我們想要的結(jié)果谓厘,這就是:currentStyle幌羞。代碼示例如下:

var node = document.getElementById("test");
var computedStyle = node.currentStyle;

alert(computedStyle.backgroundColor); 
alert(computedStyle.width);                  
alert(computedStyle.height);            
alert(computedStyle.border); 

3、代碼效果

http://js.jirengu.com/zadoc/4/edit

4竟稳、 onlick與addEventListener的區(qū)別属桦?

  • onclick 只能綁定一個事件,綁定多個會產(chǎn)生覆蓋他爸;不能設(shè)置參數(shù)聂宾,使用默認(rèn)的事件冒泡階段。
  • addEventListener中有第3個參數(shù)诊笤,attachEvent沒有系谐。第3個參數(shù)傳遞的是false或true。這個參數(shù)可選,默認(rèn)是false纪他。
    false--表示事件處理將在冒泡階段執(zhí)行鄙煤。
    true--表示事件處理將在捕獲階段執(zhí)行。
  • 理論上茶袒,Event Listeners (addEventListener梯刚、attachEvent(IE使用 ))可以無限增加事件監(jiān)聽給某個一元素。實(shí)際應(yīng)用的約束就是客戶端內(nèi)存的限制薪寓,這一點(diǎn)因每個瀏覽器而異亡资。

5、解釋DOM2事件傳播機(jī)制预愤?

當(dāng)事件發(fā)生在某個文檔節(jié)點(diǎn)上時(即事件目標(biāo))沟于,目標(biāo)的事件處理程序就會被觸發(fā)。此外目標(biāo)的每個祖先節(jié)點(diǎn)也有機(jī)會處理該事件植康。

  • 2級DOM的事件傳播包含三個階段:
    捕捉階段(capturing)旷太,事件從頂級文檔樹節(jié)點(diǎn)一級一級向下遍歷,直到到達(dá)該事件的目標(biāo)節(jié)點(diǎn)销睁。
    到達(dá)事件的目標(biāo)節(jié)點(diǎn)供璧,執(zhí)行目標(biāo)節(jié)點(diǎn)的時間處理程序。
    事件起泡(bubbling)冻记,事件從目標(biāo)節(jié)點(diǎn)一級一級向上上溯睡毒,直到頂級文檔樹節(jié)點(diǎn)。
  • 相應(yīng)的冗栗,2級DOM通過下面的兩個函數(shù)給節(jié)點(diǎn)對象添加和刪除事件處理函數(shù)演顾。
    addEventListener(eventType, handler, propagate);
    removeEventListener(eventType, handler, propagate);
    三個參數(shù)意思分別如下:
    eventType: 即事件類型(不加on)。比如:"click"隅居。
    handler: 事件處理函數(shù)钠至。傳入?yún)?shù)即為事件對象event。
    propagate: 是否只執(zhí)行捕獲和目標(biāo)節(jié)點(diǎn)兩個階段胎源。true的話棉钧,只執(zhí)行1,2兩個階段涕蚤;false的話宪卿,只指向2,3兩個階段万栅。
  • IE的事件傳播只包含上邊的2和3兩個階段
    相應(yīng)的佑钾,IE通過下面兩個函數(shù)給節(jié)點(diǎn)對象添加和刪除事件處理函數(shù)。
    attachEvent(eventType, handler);
    detachEvent(eventType, handler);
    參數(shù)意思同2級DOM對應(yīng)的函數(shù)參數(shù)

6烦粒、有如下代碼次绘,要求當(dāng)點(diǎn)擊每一個元素li時控制臺展示該元素的文本內(nèi)容。不考慮兼容

<ul class="ct">
    <li>這里是</li>
    <li>饑人谷</li>
    <li>前端14班</li>
</ul>
<script>
//todo ...
</script>

方法一(利用閉包):http://js.jirengu.com/kidog/1/edit?html,js,console,output
方法二(利用 this):http://js.jirengu.com/tehuq/1/edit?js,console,output

7、補(bǔ)全代碼邮偎,要求:

  • 當(dāng)點(diǎn)擊按鈕開頭添加時在<li>這里是</li>元素前添加一個新元素管跺,內(nèi)容為用戶輸入的非空字符串;當(dāng)點(diǎn)擊結(jié)尾添加時在最后一個 li 元素后添加用戶輸入的非空字符串.
  • 當(dāng)點(diǎn)擊每一個元素li時控制臺展示該元素的文本內(nèi)容禾进。
<ul class="ct">
    <li>這里是</li>
    <li>饑人谷</li>
    <li>任務(wù)班</li>
</ul>
<input class="ipt-add-content" placeholder="添加內(nèi)容"/>
<button id="btn-add-start">開頭添加</button>
<button id="btn-add-end">結(jié)尾添加</button>
<script>
//你的代碼
</script>
<script>
var ct=document.getElementsByClassName('ct')[0]
var addS=document.getElementById('btn-add-start')
var addE=document.getElementById('btn-add-end')
var lis=ct.getElementsByTagName('li')

function getEvent(){
  for(var i=0;i<lis.length;i++){
    lis[i].onclick=function(){
      console.log(this.innerHTML)
    }
  }
}
getEvent()

addS.onclick=function(){
  var ipt=document.getElementsByTagName('input')[0]
  if (ipt.value.replace(/(^s*)|(s*$)/g, "").length ==0) 
  {console.log('不能為空');return}
  var newLi=document.createElement('li')
  newLi.innerHTML=ipt.value
  ct.insertBefore(newLi,ct.firstChild)
  lis=ct.getElementsByTagName('li')
  getEvent()
}
addE.onclick=function(){
  var ipt=document.getElementsByTagName('input')[0]
  if (ipt.value.replace(/(^s*)|(s*$)/g, "").length ==0) 
  {console.log('不能為空');return}
  var newLi=document.createElement('li')
  newLi.innerHTML=ipt.value
  ct.appendChild(newLi)
  lis=ct.getElementsByTagName('li')
  getEvent()
}
</script>

預(yù)覽地址:http://js.jirengu.com/zacam/1/edit?html,js,console,output

8豁跑、補(bǔ)全代碼,要求:當(dāng)鼠標(biāo)放置在li元素上泻云,會在img-preview里展示當(dāng)前l(fā)i元素的data-img對應(yīng)的圖片艇拍。

<ul class="ct">
    <li data-img="1.png">鼠標(biāo)放置查看圖片1</li>
    <li data-img="2.png">鼠標(biāo)放置查看圖片2</li>
    <li data-img="3.png">鼠標(biāo)放置查看圖片3</li>
</ul>
<div class="img-preview"></div>
<script>
//你的代碼
</script>
<script>
var lis=document.getElementsByTagName('li')
var ct=document.getElementsByClassName('img-preview')[0]
var img1=document.createElement('img')
ct.appendChild(img1)

for(var i=0;i<lis.length;i++){
  lis[i].onmouseover=function(){
    img1.src=this.getAttribute('data-img')
  }
}
</script>

預(yù)覽鏈接:http://js.jirengu.com/bagix/2/edit
方法二:利用事件代理
預(yù)覽鏈接:http://js.jirengu.com/duseb/3/edit?html,js,output

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宠纯,隨后出現(xiàn)的幾起案子卸夕,更是在濱河造成了極大的恐慌,老刑警劉巖婆瓜,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件快集,死亡現(xiàn)場離奇詭異,居然都是意外死亡廉白,警方通過查閱死者的電腦和手機(jī)个初,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猴蹂,“玉大人院溺,你說我怎么就攤上這事“跚幔” “怎么了珍逸?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長聋溜。 經(jīng)常有香客問我谆膳,道長,這世上最難降的妖魔是什么勤婚? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任摹量,我火速辦了婚禮涤伐,結(jié)果婚禮上馒胆,老公的妹妹穿的比我還像新娘。我一直安慰自己凝果,他們只是感情好祝迂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著器净,像睡著了一般型雳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天纠俭,我揣著相機(jī)與錄音沿量,去河邊找鬼。 笑死冤荆,一個胖子當(dāng)著我的面吹牛朴则,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钓简,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雄可,長吁一口氣:“原來是場噩夢啊……” “哼微服!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤被辑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后幽告,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翎碑,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年席镀,在試婚紗的時候發(fā)現(xiàn)自己被綠了匹中。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡豪诲,死狀恐怖顶捷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屎篱,我是刑警寧澤服赎,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站交播,受9級特大地震影響重虑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秦士,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一缺厉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧隧土,春花似錦提针、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至皆愉,卻和暖如春嗜价,著一層夾襖步出監(jiān)牢的瞬間艇抠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工久锥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留家淤,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓瑟由,卻偏偏與公主長得像媒鼓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子错妖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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