【轉(zhuǎn)載】淺談如何封裝css —— 添加及刪除class/link/style

<pre>
// JavaScript Document
//前臺調(diào)用
var $ = function() {
return new Base();
};
//基礎(chǔ)類
function Base() {
//創(chuàng)建一個類
//創(chuàng)建一個數(shù)組來獲取一個節(jié)點和節(jié)點數(shù)組
this.elements = [];
}
</pre>
<pre>
//創(chuàng)建一個數(shù)組來獲取一個節(jié)點和節(jié)點數(shù)組
//Base.prototype.elements=[];這是是在類外面定義的,所以要把它放在類里面進行私有化
Base.prototype.getId = function(id) {
this.elements.push(document.getElementById(id));
return this;
};
</pre>
<pre>
//獲取元素節(jié)點
Base.prototype.getTagName = function(tag) {
var tags = document.getElementsByTagName(tag);
for (var i = 0; i < tags.length; i++) {
this.elements.push(tags[i]);
}
return this;
};
</pre>
<pre>
//獲取Class節(jié)點的信息
Base.prototype.getClass = function(className) {
var all = document.getElementsByTagName('*');
for (var i = 0; i < all.length; i++) {
if (all[i].className == className) {
this.elements.push(all[i]);
}
}
return this;
};
</pre>
<pre>
//獲取某一個節(jié)點
Base.prototype.getElement = function(num) {
var element = this.elements[num];
this.elements = [];
this.elements[0] = element;
return this;
};
</pre>
<pre>
//設(shè)置CSS
Base.prototype.css = function(attr, value) { //這里的參數(shù)是兩個
for (var i = 0; i < this.elements.length; i++) {
if (arguments.length == 1) { //當(dāng)傳入的參數(shù)的長度等于1的時候(只傳入屬性)避矢,就返回這個元素的style
//這個只能獲取行內(nèi)樣式撩嚼,不能獲取css中的樣式
//return this.elements[i].style[attr];
//Dom中g(shù)etComputedStyle方法可用來獲取元素中所有可用的css屬性列表,以數(shù)組形式返回舅柜,并且是readonly的。
//IE中則用currentStyle代替躲惰。
// 語法:arr_style=window.getComputedStyle(elem_id,ov)
if (typeof window.getComputedStyle != 'undefined') { //W3C
return window.getComputedStyle(this.elements[i], null)[attr];
} else if (typeof this.elements[i].currentStyle != 'undefined') { //IE
return this.elements[i].currentStyle[attr];
}
}
this.elements[i].style[attr] = value;
}
return this;
};
</pre>
<pre>
//設(shè)置innerHTML
Base.prototype.html = function(str) {
for (var i = 0; i < this.elements.length; i++) {
//這里判斷傳入的參數(shù)是否為0個致份,如果是0個則獲取這個的innerHTML
if (arguments.length == 0) {
return this.elements[i].innerHTML; //一旦這么設(shè)置就不能實現(xiàn)連綴了
}
this.elements[i].innerHTML = str;
}
return this;
};
</pre>
<pre>
//添加class屬性
Base.prototype.addClass = function(className) {
//先循環(huán)一下,看有多少個顏色
for (var i = 0; i < this.elements.length; i++) {
if (!this.elements[i].className.match(new RegExp(('//s|^') + className + '(//s|$)'))) {
//查看傳進來的屬性原來是否存在
this.elements[i].className += ' ' + className;
}
}
return this;
};
</pre>
<pre>
//刪除class屬性
Base.prototype.removeClass = function(className) {
for (var i = 0; i < this.elements.length; i++) {
if (!this.elements[i].className.match(new RegExp(('//s|^') + className + '(//s|$'))) { //查看傳進來的屬性原來是否存在
this.elements[i].className = this.elements[i].className.replace(new RegExp(('//s|^') + className + '(//s|$)'), ' ');
}
}
return this;
};
</pre>

<pre>
//添加link或style的CSS規(guī)則
Base.prototype.addRule = function(num, selectorText, cssText, position) {
var sheet = document.styleSheets[num];
if (typeof sheet.insertRule != 'undefined') { //w3c
sheet.insertRule(selectorText + '{' + cssText + '}', position);
} else if (typeof sheet.addRule != 'undefined') { //ie
sheet.addRule(selectorText, cssText, position);
}
return this; //返回this才能實行連綴功能
};
</pre>
<pre>
//刪除link或style的CSS規(guī)則
Base.prototype.removeRule = function(num, index) {
var sheet = document.styleSheets[num];
if (typeof sheet.deleteRule != 'undefined') { //W3C
sheet.deleteRule(index);
} else if (typeof sheet.removeRule != 'undefined') { //IE
sheet.removeRule(index);
}
return this;
};
</pre>
<pre>
//設(shè)置點擊事件
Base.prototype.click = function(fn) {
for (var i = 0; i < this.elements.length; i++) {
this.elements[i].onclick = fn;
}
return this;
};
</pre>
<pre>
// JavaScript Document
window.onload = function() {
//因為在base里面础拨,返回的是一個base對象氮块,而他本身也沒有設(shè)置html對象
//這里這么設(shè)置也是不需要實現(xiàn)連綴功能的
$().getId('box').html();

// 獲取class為red的第二個元素并設(shè)置css
$().getClass('red').getElement(2).css('color', 'green');

// 設(shè)置顏色
$().getId('box').css('color','red');

// 增加class
$().getId('pox').addClass('a').addClass('b');

// 增加/刪除class
$().getId('pox').addClass('a').addClass('b').removeClass('a');
$().addRule(0,'body','background:green',0).addRule(0,'div','font-size:150px',0);
$().removeRule(0,0);

}
</pre>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市诡宗,隨后出現(xiàn)的幾起案子滔蝉,更是在濱河造成了極大的恐慌,老刑警劉巖塔沃,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝠引,死亡現(xiàn)場離奇詭異,居然都是意外死亡蛀柴,警方通過查閱死者的電腦和手機螃概,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸽疾,“玉大人吊洼,你說我怎么就攤上這事≈瓢梗” “怎么了冒窍?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵递沪,是天一觀的道長。 經(jīng)常有香客問我超燃,道長区拳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任意乓,我火速辦了婚禮樱调,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘届良。我一直安慰自己笆凌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布士葫。 她就那樣靜靜地躺著乞而,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慢显。 梳的紋絲不亂的頭發(fā)上爪模,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音荚藻,去河邊找鬼屋灌。 笑死,一個胖子當(dāng)著我的面吹牛应狱,可吹牛的內(nèi)容都是我干的共郭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼疾呻,長吁一口氣:“原來是場噩夢啊……” “哼除嘹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起岸蜗,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤尉咕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后璃岳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體龙考,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年矾睦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炎功。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡枚冗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蛇损,到底是詐尸還是另有隱情赁温,我是刑警寧澤坛怪,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站股囊,受9級特大地震影響袜匿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稚疹,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一居灯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧内狗,春花似錦怪嫌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赂鲤,卻和暖如春噪径,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背数初。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工找爱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妙真。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓缴允,卻偏偏與公主長得像,于是被迫代替她去往敵國和親珍德。 傳聞我的和親對象是個殘疾皇子练般,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

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