JS操作時(shí)遇到的知識(shí)點(diǎn)

input標(biāo)簽屬性介紹

name屬性:表示元素的名稱着撩,也就是name的值代表當(dāng)前input元素的名字;

id屬性:用于css引用或者其他引用

value屬性:表示當(dāng)前input框內(nèi)顯示的文字

style屬性:用于設(shè)置css樣式效床。如顏色睹酌,背景色等

type屬性:用于設(shè)置輸入框的類型,最重要的屬性

input標(biāo)簽的type屬性詳述

其type屬性有多種類型:

? ? ? ? ? ? ? ? ? ? ? ? 文本框(type=text)剩檀,

? ? ? ? ? ? ? ? ? ? ? ? 按鈕(type=button)憋沿,

? ? ? ? ? ? ? ? ? ? ? ? 單選(type=radio)

? ? ? ? ? ? ? ? ? ? ? ? 復(fù)選(type=checkbox)

? ? ? ? ? ? ? ? ? ? ? 下拉列表(type=select)

? ? ? ? ? ? ? ? ? ? ? 文本域(type=textarea)

用Input標(biāo)簽,利用其type屬性沪猴,從而可以設(shè)置一系列表單元素辐啄,input表簽放在form表單中采章。

placeholder屬性

Placeholder 是 HTML5 新增的一個(gè)表單標(biāo)簽屬性,當(dāng) input 或者 textarea 設(shè)置了該屬性后壶辜,該屬性的值將作為灰字提示顯示在文本框中悯舟,當(dāng)文本框獲得焦點(diǎn)(或輸入內(nèi)容)時(shí),提示文字自動(dòng)消失砸民。

修改 Placeholder 文本顏色

默認(rèn)情況下抵怎,Placeholder 的文字是灰色,輸入的文字是黑色岭参。而我們拿到的設(shè)計(jì)稿上的色值往往并不與默認(rèn)情況下完全一致反惕。那么,如何修改 Placeholder 的色值呢演侯? 如果直接寫input{color:red;}姿染,IE10 和 Firefox下,Placeholder 文字和輸入文字都變成了紅色秒际,在 Chrome 和 Safari 下悬赏,Placeholder 文字顏色不變,只有輸入的文字變成紅色娄徊。 顯然闽颇,這種做法是行不通的。因?yàn)槲覀冎幌敫淖?Placeholder 文字的顏色嵌莉,并不想改變輸入文字的顏色进萄。正確的寫法如下:

::-moz-placeholder{color:red;}? ? ? ? ? ?

//Firefox::-webkit-input-placeholder{color:red;}? ?

//Chrome,Safari:-ms-input-placeholder{color:red;}? ? ? ?

//IE10

使 Placeholder 兼容所有瀏覽器

前面我們知道了,IE6 到 IE9 并不支持原生的 Placeholder锐峭,并且即使在支持原生 Placeholder 的瀏覽器上中鼠,其表現(xiàn)也并不一致。在實(shí)際項(xiàng)目中沿癞,如何使所有瀏覽器都一致地支持 Placeholder呢援雇?

1、如果只需要讓不支持 Placeholder 的瀏覽器能夠支持改功能椎扬,并不要求支持原生 Placeholder 的瀏覽器表現(xiàn)一致惫搏,那么可以采用如下方法:

function placeholder(nodes,pcolor) {

if(nodes.length && !("placeholder" in document_createElement("input"))){? ?

for(i=0; i<nodes.length; i++){? ?

var self = nodes[i], placeholder = self.getAttribute('placeholder') || '';? ? ? ? ?

self.onfocus = function(){?

if(self.value == placeholder){?

self.value = '';

self.style.color = "";?

}?

}?

self.onblur = function(){?

if(self.value == ''){?

self.value = placeholder;?

self.style.color = pcolor;? ? ?

}? ?

}? ? ?

self.value = placeholder;

self.style.color = pcolor;?

}

}

}

2、如果需要自定義樣式蚕涤,并且希望 Placeholder 在所有瀏覽器下表現(xiàn)一致筐赔,可以通過(guò)利用 label 標(biāo)簽?zāi)M一個(gè) Placeholder 的樣式放到輸入框上,當(dāng)輸入框獲得焦點(diǎn)的時(shí)候隱藏 label揖铜,當(dāng)輸入框失去焦點(diǎn)的時(shí)候顯示 label茴丰。

<script>

$(function(){

$('.for_text').click(function(){?

$('.text').focus()? })?

$('.text').blur(function(){? ?

$('.for_text').hide();?

})})

</script>

<style>

.for_text{

position:absolute;

cursor:text;

margin:5px;

color:#999;

}

.text{

padding:5px;

}

</style>

<form>

<label for="text" class="for_text">請(qǐng)輸入文本</label>

<input type="text" name="text" class="text"/>

</form>

3、最后一種方法,也是使用最常見(jiàn)的贿肩,但是不能改變文本的顏色峦椰,使用腳本的方式判斷文本框的值,獲取焦點(diǎn)或者輸入文本的時(shí)候汰规,如果為預(yù)設(shè)的值汤功,那么就清空文本框,失去焦點(diǎn)的時(shí)候溜哮,如果文本框的值為空滔金,則替換為我們預(yù)設(shè)的值。

<input type="text" name="text" value="請(qǐng)輸入文本" class="text"onFocus="if(this.value=='請(qǐng)輸入文本')

this.value = ''"onBlur="if(this.value=='')

this.value='請(qǐng)輸入文本'"/>

let:

實(shí)現(xiàn)塊級(jí)作用域

ES6 新增關(guān)鍵字let茂嗓,可以使用 let 關(guān)鍵字來(lái)實(shí)現(xiàn)塊級(jí)作用域鹦蠕。let 聲明的變量只在 let 命令所在的代碼塊 {} (離let最近的{})內(nèi)有效,在{} 之外不能訪問(wèn)在抛。

ES6 之前,JavaScript 只有兩種作用域: 全局作用域和私有作用域萧恕, 沒(méi)有塊級(jí)作用域的概念刚梭,使用 var 關(guān)鍵字聲明的變量在{} 外依然能被訪問(wèn)到(函數(shù)內(nèi)使用 var 聲明的變量只能在函數(shù)內(nèi)訪問(wèn),如果不使用 var 則是全局變量)票唆。

// 塊級(jí)作用域

{

? ? let s=3;

? ? console.log(s);//3

}

console.log(s);//s is not defined

不存在變量提升

let聲明的變量不會(huì)進(jìn)行變量提升朴读,但是有一個(gè)語(yǔ)法檢測(cè)的機(jī)制,會(huì)在代碼自上而下執(zhí)行之前先進(jìn)行語(yǔ)法檢測(cè)走趋,看是否有語(yǔ)法錯(cuò)誤(是否有重復(fù)聲明的變量衅金、是否有l(wèi)et聲明的變量在聲明前訪問(wèn)),如果有就直接報(bào)錯(cuò)簿煌。

console.log(a);//Uncaught ReferenceError: a is not defined

let a=2;

阻斷了與window的關(guān)系

let聲明的變量不會(huì)成為window對(duì)象的屬性氮唯。

let a=2;

console.log(window.a);// undefined

不能重復(fù)聲明

let a=2;

console.log(a);

var a=3; // 不能進(jìn)行重復(fù)的聲明:Uncaught SyntaxError: Identifier 'a' has already been declared

console.log(3);

注意:如果在{}中用function聲明變量,代碼塊內(nèi)部會(huì)進(jìn)行語(yǔ)法檢測(cè)姨伟,如果發(fā)現(xiàn)有重名的變量就直接報(bào)錯(cuò)

{

? ? function fn(){};

? ? var fn = 2;//SyntaxError: Identifier 'fn' has already been declared

}

暫時(shí)性死區(qū)

如果代碼塊中存在let和const命令惩琉,這個(gè)代碼塊從一開(kāi)始就對(duì)這些命令聲明的變量形成了封閉作用域。只要是在聲明之前就使用這些變量夺荒,就會(huì)報(bào)錯(cuò)瞒渠。代碼塊內(nèi),在使用let聲明變量之前的那個(gè)區(qū)域內(nèi)技扼,該變量都是不可用的(不允許訪問(wèn))伍玖,一旦訪問(wèn)就報(bào)錯(cuò)。這就是“暫時(shí)性死區(qū)”(temporal dead zone剿吻,簡(jiǎn)稱 TDZ)窍箍。

可以理解為,只要一進(jìn)入當(dāng)前作用域,經(jīng)過(guò)詞法檢測(cè)就已經(jīng)知道待使用變量是誰(shuí)了仔燕,但是不可獲取造垛,只有等到聲明變量的代碼執(zhí)行后,才可以獲取和使用該變量晰搀。

const

const聲明一個(gè)只讀的常量 五辽。一旦聲明, 常量的值就不能改變外恕。常量 所謂的常量就是不能改變的值

const PI = 3.1415;

PI // 3.1415

PI = 3;

// TypeError: Assignment to constant variable.

上面代碼表明改變常量的值會(huì)報(bào)錯(cuò)杆逗。const聲明的變量不得改變值,這意味著鳞疲,const一旦聲明變量罪郊,就必須立即初始化(賦值),不能留到以后賦值尚洽。

并不是變量的值不能改動(dòng)悔橄,而是指向的那個(gè)內(nèi)存地址所保存的數(shù)據(jù)不得改動(dòng);數(shù)據(jù)一半存儲(chǔ)在堆中腺毫,對(duì)于簡(jiǎn)單的基本數(shù)據(jù)類型(string number boolean null undefined)值保存在指向的那個(gè)內(nèi)存地址癣疟,因此等同于常量。但對(duì)于引用數(shù)據(jù)類型(object array ),變量指向的內(nèi)存地址潮酒,保存的只是一個(gè)指向?qū)嶋H數(shù)據(jù)的指針睛挚,const只能保證這個(gè)指針是固定的(即指向另一個(gè)固定的地址),至于它指向的數(shù)據(jù)結(jié)構(gòu)是不是可變的急黎,就完全不能夠控制了扎狱。

const foo = {};

// 為 foo 添加一個(gè)屬性,可以成功

foo.prop = 123;

foo.prop // 123

// 將 foo 指向另一個(gè)對(duì)象勃教,就會(huì)報(bào)錯(cuò)

foo = {}; // TypeError: "foo" is read-only

上面代碼中淤击,常量foo儲(chǔ)存的是一個(gè)地址,這個(gè)地址指向一個(gè)對(duì)象荣回。不可變的只是這個(gè)地址遭贸,即不能把foo指向另一個(gè)地址,但對(duì)象本身是可變的心软,所以依然可以為其添加新屬性壕吹。

const a = [];//空值也是值

a.push('Hello'); // 可執(zhí)行

a.length = 0;? ? // 可執(zhí)行

a = ['Dave'];? ? // 報(bào)錯(cuò)

上面代碼中,常量a是一個(gè)數(shù)組删铃,這個(gè)數(shù)組本身是可寫的耳贬,但是如果將另一個(gè)數(shù)組賦值給a,就會(huì)報(bào)錯(cuò)猎唁。

如果真的想將對(duì)象凍結(jié)咒劲,應(yīng)該使用Object.freeze方法。

const foo = Object.freeze({});

// 常規(guī)模式時(shí),下面一行不起作用腐魂;

// 嚴(yán)格模式時(shí)帐偎,該行會(huì)報(bào)錯(cuò)

foo.prop = 123;

上面代碼中,常量foo指向一個(gè)凍結(jié)的對(duì)象蛔屹,所以添加新屬性不起作用削樊,嚴(yán)格模式時(shí)還會(huì)報(bào)錯(cuò)。

除了將對(duì)象本身凍結(jié)兔毒,對(duì)象的屬性也應(yīng)該凍結(jié)漫贞。下面是一個(gè)將對(duì)象徹底凍結(jié)的遞歸函數(shù)。

var constantize = (obj) => {

? Object.freeze(obj);

? Object.keys(obj).forEach( (key, i) => {

? ? if ( typeof obj[key] === 'object' ) {

? ? ? constantize( obj[key] );

? ? }

? });

};

keycode==13

window.onload

window.onload出現(xiàn)的原因育叁?

?我們都知道頁(yè)面的代碼順序是從上往下進(jìn)行加載迅脐,很多時(shí)候我們要對(duì)頁(yè)面中的某一個(gè)模塊進(jìn)行操作,這時(shí)候我們常常使用javascript代碼來(lái)進(jìn)行操作豪嗽。為了能夠保證操作的模塊或?qū)ο笤趈s代碼之前就加載了谴蔑,我們不得不把js代碼放在頁(yè)面的底端。但是我們?cè)谠O(shè)計(jì)頁(yè)面的時(shí)候龟梦,為了把js代碼放在一起树碱,或者一個(gè)讓頁(yè)面更加簡(jiǎn)潔的位置,那就有可能出現(xiàn)代碼中操作的對(duì)象未被加載的情況变秦,那么我們?cè)撊绾稳ソ鉀Q呢?這時(shí)候window.onload就被有了存在的意義了框舔。

window.onload是什么蹦玫?

window.onload是一個(gè)事件,在文檔加載完成后能立即觸發(fā)刘绣,并且能夠?yàn)樵撌录?cè)事件處理函數(shù)樱溉。將要對(duì)對(duì)象或者模塊進(jìn)行操作的代碼存放在處理函數(shù)中。即:window.onload =function (){這里寫操作的代碼};

node

nodeValue屬性

用于設(shè)置或返回指定結(jié)點(diǎn)的節(jié)點(diǎn)值

nodeValue 屬性對(duì)于文檔節(jié)點(diǎn)和元素節(jié)點(diǎn)是不可用的纬凤。

注釋:如果您希望返回元素的文本福贞,請(qǐng)記住文本始終位于文本節(jié)點(diǎn)中,并且您必須返回文本節(jié)點(diǎn)的值(element.childNodes[0].nodeValue)停士。提示:nodeValue 屬性的替代選擇是 textContent 屬性挖帘。

forEach()方法對(duì)數(shù)組的每個(gè)元素執(zhí)行一次提供的函數(shù)

var array = ['a', 'b', 'c'];

array.forEach(function(element) {

? console.log(element);

});

forEach方法中的function回調(diào)有三個(gè)參數(shù):第一個(gè)參數(shù)是遍歷的數(shù)組內(nèi)容,第二個(gè)參數(shù)是對(duì)應(yīng)的數(shù)組索引恋技,第三個(gè)參數(shù)是數(shù)組本身

foreach 語(yǔ)法:

[ ].forEach(function(value,index,array){


? //code something


  });

setAttribute()

增加一個(gè)指定名稱和治的新屬性拇舀,或者把一個(gè)現(xiàn)有屬性設(shè)定為指定的值

elementNode.setAttribute(name,value)

說(shuō)明:

1.name:要設(shè)置的屬性名

2.value:要設(shè)置的屬性值

注意:

1.把指定的屬性設(shè)置為指定的值。如果不存在具有指定名稱的屬性蜻底,該方法將創(chuàng)建一個(gè)新屬性骄崩。

2.類似于getAttribute()方法,setAttribute()方法只能通過(guò)元素節(jié)點(diǎn)對(duì)象調(diào)用的函數(shù)

substring()方法

定義和用法

substring() 方法用于提取字符串中介于兩個(gè)指定下標(biāo)之間的字符。

substring() 方法返回的子串包括 開(kāi)始 處的字符要拂,但不包括 結(jié)束 處的字符抠璃。

string.substring(from, to)

參數(shù)描述

from必需。一個(gè)非負(fù)的整數(shù)脱惰,規(guī)定要提取的子串的第一個(gè)字符在 string Object 中的位置搏嗡。

to可選。一個(gè)非負(fù)的整數(shù)枪芒,比要提取的子串的最后一個(gè)字符在 string Object 中的位置多 1彻况。如果省略該參數(shù),那么返回的子串會(huì)一直到字符串的結(jié)尾

innerHTML innerText的使用和區(qū)別

document對(duì)象中有innerHTML舅踪、innerText這兩個(gè)屬性纽甘,都是獲取document對(duì)象文本內(nèi)容,但使用起來(lái)還是有區(qū)別的抽碌。

1) innerHTML設(shè)置或獲取標(biāo)簽所包含的HTML+文本信息(從標(biāo)簽起始位置到終止位置全部?jī)?nèi)容悍赢,包括HTML標(biāo)簽,但不包括自身)

2) outerHTML設(shè)置或獲取標(biāo)簽自身及其所包含的HTML+文本信息(包括自身)

3) innerText設(shè)置或獲取標(biāo)簽所包含的文本信息(從標(biāo)簽起始位置到終止位置的內(nèi)容货徙,去除HTML標(biāo)簽左权,但不包括自身)

4) outerText設(shè)置或獲取標(biāo)簽自身及其所包含的文本信息(包括自身)

innerText和outerText在獲取的時(shí)候是相同效果,但在設(shè)置時(shí)痴颊,innerText僅設(shè)置標(biāo)簽所包含的文本赏迟,而outerText設(shè)置包含包括標(biāo)簽自身在內(nèi)的文本。

JS中的rows和cells

Table下面可以有thead和tbody兩個(gè)分組對(duì)象蠢棱,某些時(shí)候可以代替div使用锌杀,比如實(shí)現(xiàn)某部份表格隱藏。

tr是行泻仙,th或者td是列糕再,這些對(duì)象構(gòu)成表格陣列

rows集合返回表格中所有行的一個(gè)數(shù)組;

cells集合返回表格中所有單元格的一個(gè)數(shù)組玉转。

rows:表示表格所有行的集合

cells:表示行內(nèi)單元格的集合

語(yǔ)法

tableID.rows[rowsIndex]

tableID.cells[cellsIndex]

var x=document.getElementById('table1').rows[0].cells[0].innerHTML;

// 顯示出第一個(gè)單元格的內(nèi)容

className屬性

通過(guò)className屬性設(shè)置某個(gè)元素的class屬性時(shí)將替換該元素原有的class設(shè)置

className 屬性設(shè)置或返回元素的 class 屬性突想。

如果需要的的“追加”效果而不是“替換”,可以利用字符串拼接操作究抓,把新的class設(shè)置追加到className屬性上去猾担。

elem.className += " intro";? //注意:intro的第一個(gè)字符是空格

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市刺下,隨后出現(xiàn)的幾起案子垒探,更是在濱河造成了極大的恐慌,老刑警劉巖怠李,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件圾叼,死亡現(xiàn)場(chǎng)離奇詭異蛤克,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)夷蚊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門构挤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人惕鼓,你說(shuō)我怎么就攤上這事筋现。” “怎么了箱歧?”我有些...
    開(kāi)封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵矾飞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我呀邢,道長(zhǎng)洒沦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任价淌,我火速辦了婚禮申眼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝉衣。我一直安慰自己括尸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布病毡。 她就那樣靜靜地躺著濒翻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啦膜。 梳的紋絲不亂的頭發(fā)上肴焊,一...
    開(kāi)封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音功戚,去河邊找鬼。 笑死似嗤,一個(gè)胖子當(dāng)著我的面吹牛啸臀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播烁落,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼乘粒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了伤塌?” 一聲冷哼從身側(cè)響起灯萍,我...
    開(kāi)封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎每聪,沒(méi)想到半個(gè)月后旦棉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體齿风,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年绑洛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了救斑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡真屯,死狀恐怖脸候,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绑蔫,我是刑警寧澤运沦,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站配深,受9級(jí)特大地震影響携添,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凉馆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一薪寓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧澜共,春花似錦向叉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至京革,卻和暖如春奇唤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匹摇。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工咬扇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人廊勃。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓懈贺,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坡垫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子梭灿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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