注意JavaScript使用的是className去訪問class屬性,因為class是一個保留關鍵字,因為將來JavaScript可能開始支持像Java一樣的類。

我們在討論style屬性時遇到了棘手的細節問題和瀏覽器差異性 " /> 亚洲欧美精品无码一区二在线 ,日韩在线看片中文字幕不卡,91青青草原

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

JavaScript更改class和id的方法

是className,可不是class

注意JavaScript使用的是className去訪問class屬性,因為class是一個保留關鍵字,因為將來JavaScript可能開始支持像Java一樣的類。

我們在討論style屬性時遇到了棘手的細節問題和瀏覽器差異性帶來的麻煩,正如同經歷一場驚濤駭浪。而class和id的更改則像是沙漠里一片平靜的綠洲,瀏覽器們在這里和諧相處。思考這個例子:

p {

color: #000000; /* black */

}

p.emphasis {

color: #cc0000; /* red */

}

<p id="test">Test</p>

最初,該段落沒有定義class,所以它的字體顏色是黑色。不過,一行JavaScript就足以改變它的樣式:

document.getElementById('test').className = 'emphasis';

瞬間文字變成了紅色。如果想要改變回來,你可以按如下操作:

document.getElementById('test').className = '';

你移除了樣式,該段落恢復到默認的p{}規則。

對于一個實際應用中的例子,看看“限長的文本輸入區”。計數器有這樣的結構和呈現樣式(該結構由JavaScript動態生成,不過那不影響這個例子):

<div class="counter"><span>12</span>/1250</div>

div.counter {

font-size: 80%;

padding-left: 10px;

}

span.toomuch {

font-weight: 600;

color: #cc0000;

}

當腳本發現用戶輸入的文字一定達到了最大長度,它修改作為計數器的<span>的class為toomuch:

[限長的文本輸入區,第20~23行]

if (currentLength > maxLength)

this.relatedElement.className = 'toomuch';

else

this.relatedElement.className = '';

現在,作為計數器的<span>字體變成粗體和紅色。

id的變更以幾乎完全一樣的方式工作:

p {

color: #000000; /* black */

}

p#emphasis {

color: #cc0000; /* red */

}

<p>Test</p>

document.getElementsByTagName('p')[0].id = 'emphasis';

該段落的文字再次變成了紅色。但是,我建議你不要過多改變id。除了作為CSS的鉤子,它們也常常作為JavaScript的鉤子,改變它們可能存在不確定的副作用。

增加class

通常,你不會給一個元素的class設置新值,而只是添加一個class。因為你不希望移除元素已經擁有的任何樣式。因為CSS允許復合樣式,新class所包含的樣式被添加到元素上,不會移除任何已經存在的class的CSS指令。

“表單驗證”中的writeError()和removeError()函數是一個很好的例子。一般來說我會給表單域應用好幾個class,因為圖形設計師經常對輸入框使用兩個甚至三個寬度。當一個表單域包含錯誤的時候,我希望添加一個特別的警告樣式,但我不希望攪亂該元素已經擁有的樣式。所以,我不能簡單地覆蓋舊的class值,那樣我將失去已經指定的寬度。

看這樣的情形:

<input class="smaller" name="name" />

input.smaller {

width: 75px;

}

input.errorMessage {

border-color: #cc0000;

}

最開始,輸入框的寬度是75px。如果腳本設置class為'errorMessage'并且刪除舊值,表單域會得到一個紅色的邊框,但也失去了它的寬度,而那樣的話可能會讓用戶感到非常迷惑。

因此,我是添加了errorMessage class:

[表單驗證,第105~106行]

function writeError(obj,message) {

obj.className += ' errorMessage';

這段代碼取得已存在的className并在其后附加一個新的class,在它之前加一個空格。這個空格分隔新的class和任何對象可能已經擁有的class值。現在輸入框除了擁有75px寬度之外,如我們所愿地得到了紅色邊框。該表單域現在應用了兩個class,HTML就好像這樣:

<input class="smaller errorMessage" name="name" />

Class在Mozilla中的名稱與空白

你可能注意到removeError()移除class的值errorMessage的時候沒有前置的空格。那是因為一個瀏覽器的bug。當你添加errorMessage到一個原來沒有值的class的時候,Mozilla會刪除前置空格。如果我們隨后執行replace(/ errorMessage/,''),Mozilla不能移除class,它找不到字符串errorMessage,因為前置空格已經不在了。

移除class

一旦用戶修正了她的錯誤,class的值errorMessage應該被移除,但任何原來的class,比如smaller,不應該受到影響。removeError()函數提供了這個功能:

[表單驗證,第119~120行]

function removeError() {

this.className = this.className.replace(/errorMessage/,'');

它先取得元素的class然后替換字符串'errorMessage'為''(一個空字符)。errorMessage從class的值中被取走,但對其他的值沒有影響。表單域失去了紅色的邊框顏色,但依然維持75px的寬度。

JavaScript技術JavaScript更改class和id的方法,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 熟妇内谢69XXXXXA片 | 亚洲免费无码中文在线 | 在线电影一区二区 | 美女脱精光让男生桶下面 | 天天噜日日噜夜夜噜 | 欧美性爱 先锋影音 | 亚洲欧美视频在线 | 国产午夜在线精品三级a午夜电影 | 欧美18videosex初次 | 肉肉的各种姿势高H细文 | 年轻老师毛茸茸自由性 | 第一福利视频网站在线 | 超碰97人人做人人爱少妇 | 日本无码专区亚洲麻豆 | 亚洲中文 字幕 国产 综合 | 日本视频一区二区免费观看 | 久久亚洲人成国产精品 | 性色爽爱性色爽爱网站 | 日日啪在线影院百度 | 天天拍拍国产在线视频 | 亚洲日韩在线天堂一 | 国产午夜亚洲精品不卡电影 | 快播h动漫网站 | 1024人成网站色www下载 | 国内极度色诱视频网站 | 日韩内射美女人妻一区二区三区 | 含羞草国产亚洲精品岁国产精品 | 亚洲精品国偷拍自产在线观看蜜臀 | 40分钟超爽大片黄 | 国产高清精品国语特黄A片 国产高清国内精品福利色噜噜 | 美女被触手注入精子强制受孕漫画 | 成人网视频在线观看免费 | 一本色道久久88加勒比—综合 | 伊人久久大香线蕉综合高清 | 国产精品人妻无码免费A片导航 | videosgrati欧美另类 | 秋霞伦理电影在线看 | 全黄h全肉细节全文 | 久久综合亚洲色hezyo | 亚洲AV怡红院影院怡春院 | 狠狠狠色丁香婷婷综合久久 |