JS基礎之手動實現簡易jQuery api

2021-09-24 05:55:47 字數 1975 閱讀 4779

今天主要實現以下兩個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 ...