今天主要實現以下兩個api:
addclass:給指定標籤增加class
settext:給指定標籤設定文字內容(textcontent)
第一版用到命名空間,命名空間相當於給自己的庫乙個名字,當函式名稱衝突,不會會覆蓋掉之前的函式。
var ffyjq =
;// 作用:獲取傳入的節點的兄弟節點
ffyjq.
getsiblings
=function
(node)
;// 遍歷所有子節點
for(
var i =
0;i// 返回array
return array;
}ffyjq.
addclass
=function
(node,classes)
}ffyjq.
settext
=function
(node,text)
;var classes =
;ffyjq.
addclass
(item3,classes)
;ffyjq.
settext
(item3,
"aaa");
console.
log(ffyjq.
getsiblings
(item3)
);
第一版的缺點是只能去呼叫ffyjq.addclass(item3,classes),而jq的呼叫方式是item3.addclass(classes)。想要實現jq的呼叫方式,有以下兩種方法:
擴充套件 node 介面,直接在 node.prototype 上加函式:
//核心**不變,只是給node.prototype增加方法
node.prototype.
getsiblings
=function()
;for
(var i =
0;ireturn array;
}node.prototype.
addclass
=function
(classes)
}node.prototype.
settext
=function
(node,text)
;console.
log(item3.getsiblings.
call
(item3));
item3.addclass.
call
(item3,
);
這種方法的缺點是容易命名重複,並且修改原型本身就不合適。
給節點加上介面,並且返回介面:
window.
jquery
=function
(nodeorselector)
else
if(nodeorselector instanceof
node);
}//給節點加上getsiblings 介面
nodes.
getsiblings
=function()
;//給節點加上addclass 介面
nodes.
addclass
=function
(classes)}}
;//給節點加上settext 介面
nodes.
settext
=function
(text)};
return nodes;};
//給個jquery加縮寫
window.$ = jquery;
var node =$(
"ul>li");
node.
addclass()
;node.
settext
("hi"
);
js手動實現簡易懶載入 LazyLoad
在網頁載入中,對於一些存在很多image的網頁,一次載入所有,會造成效能浪費,優化的方法有很多,例如base64 雪碧圖等,懶載入也是比較常見的一種效能優化的方法 給頁面中img標籤設定自定義屬性data original,用來存放真正的img源url,給所有img的src屬性設定為一張靜態或者不設...
js手動實現call,apply,bind
原文 我也不知道為什麼只能顯示一部分 好氣哦 看原文吧 先分析下3個方法的作用 改變this的指向 首先我們知道,物件上的方法,在呼叫時,this是指向物件的。let o o.fn object 函式原型上新增 mycall方法 來模擬call function.prototype.mycall f...
java資料結構之手動實現單鏈表
package com.example.demo 1 定義要儲存物件的類 class phone public phone string brand,double price public void setbrand string brand public void setprice double ...