JavaScript基本小抄

Steven Wang
14 min readOct 22, 2019

--

查詢型態
typeof(查詢)

輸入IdName值
document.gerElementById(‘IdName’).textContent= inputvalue;

取出IdName型態
var para = document.gerElementById(‘IdName’).type;

取出IdName值 (為字串 運算要轉為數值)
var para = document.gerElementById(‘IdName’).text;

字串轉數值
num = parseInt(字串)

onclick事件
document.gerElementById(‘IdName’).onclick = function(){
}

Array陣列
var cornFiled=[]; (空array)
cornField=[2,3,5]
cornField.push(5);(由array最後面做新增)
cornField[0]=10;(更改array index 0 的值為10)
cornField.length (array的長度)

Object物件
var farm ={
key1:value1,
key2,value2,
key3=[array1,array2],
goDinner:function(){}
}

混合
var farm=[{a1:xxx},{}]
取值 farm[0].a1

farm.chick=15; (Object新增)
讀取值
para0 = farm.chick
para1 = farm.key3[0]

Array內放Object
呼叫Array內的Object
[]撈Array資料
.撈Object資料

比較運算子
== / !==
=== 嚴謹比較 1==’1' / 1 === ‘1’
> ≥ < ≤

邏輯運算子
&& And
|| OR
! NOT

流程控制判斷
if(條件式){}
if(條件式){}else{}
if(條件式){}else if (條件式){}else{} 前面滿足不跑後面
switch(prefer){
case’one’:
func();
break;
case’two’:
func();
break;
dedault:
func()
break;
}

for迴圈
for(var i=1;i< 3;i++){
console.log(i)
}

迴圈常與(陣列+物件)一同使用
for (var i=1;i<array.length;i++){console.log(array[0].objectkey)
}

for迴圈 if控制判斷一同使用,找出符合條件
for(var i=0;i<array.length;i++){
if(array[i].objectkey>100){
console.log(…)
}}

i=i+1同以下兩種
i+=1
i++

陣列內物件的屬性加總
var farmsTotal = farms.length;
var fruitTotal = 0;
for (var i=1;i<farmsTotal;i++){
fruitTotal = fruitTotal + frams[i].fruit;
}
console.log(fruitTotal)

for break運用
for條件滿足一個後面迴圈就不執行
例如活動要買50份餐點,只要for陣列中找到一個有能力供應50份餐點的供應商就可以,陣列後面的供應商不用再迴圈查下去

JSON介紹

JSON資料格式 等同 JavaScript Object物件格式
JSON view chrome套件:JSONView

簡單的方式
var data = json (copy from web via 無痕視窗)
高級的方式AJAX

var total = data.length;
for (var i=0;i<totalli++){if(data[i].Rainfall10mon>0){
var country=data[i].County;
var Township=data[i].Township;
var rain=data[i].Rainfall10min;
console.log(country+Township+’:’+rain);
}}

選定document位置的兩種方式,文字給值textContent

document.getElementById(“titleId”).textContent = ‘12345’ Id只有一個唯一Id

var el = document.getElementById(“titleId”);
var el = document.querySelector(‘#id_name’);新的選取方式 選取器
var el = document.querySelector(‘.class_name’);
var el = document.querySelector(‘.class_name em’); 其中的em標籤el.textContent = ‘12345’;這種兩段的方式可以寫短些

var el = document.querySelectorAll(‘.class_name’); 選取多個 返回陣列
分別給值
el[0].textContent=’12345’;
el[1].textContect=’123’;
迴圈給值
for (var i=0,i=el.length,i++){
el[i].textContent=i+”:”+’123’;
}

屬性給值setAttributr

設定標籤屬性el.setAttribute(“屬性”,”屬性的值或取代字串”)
val el=document.querySelector(“.classname a”);
el.setAttribute(“href”,”http://www.google.com”);

取出屬性的值getAttribute

var el2 =document.querySelector(“.classname a”).getAttribute(‘href’);

取出文字textContent

var el3 =document.querySelector(“.classname a”).textContent;

取出HTML標籤textContent

var el4 = document.querySelector(“.classname a”).innerHTML;

給值HTML標籤innerHtml

var el5 = documnet.getElementById(‘main’);
el5.innerHTML=’<h1>Hello</h1>’;
el5.innerHTML=’<h1 class=”blue”>Hello</h1>’; 內置於Html的單引號要改成雙引號,才不會被認為陳述結束。這個塞陣列或JSON在網頁列表時常用

innerHTML組字串的技巧:放入變數

html
<ul class=’list’></ul>
js
var el = document.querySelector(‘.list’);
var link = ‘https://ww.google.com’;
var company=’谷歌’;
el.innerHTML=’<li><a href=”’+link+’”>’+company+’</a></li>’;

innerHTML的for迴圈應用

html
<ul class=’list’></ul>
js
var el=document.querySelector(‘.list’);
var farmLen = farms.length;
var str = ‘’;
for (i=0;i<farmLen;i++){
var content = ‘<li>’+farms[i].farmer+’</li>’;
str+=content;
}
el.innerHTML = str;

creatElement在HTML元素下面動態增加子節點

先用creatElement方法建立HTML元素
var str = document.creatElement(‘em’);
str.textContent=’1234';
str.setAttributr(‘class’,’blue’);
再用appendChild掛上去在該節點之上
document.querySector(‘.title’).appendChild(str);
這個方法不會蓋過原本的文字或屬性,會將新的HTML加在最後面

creatElenebt的for迴圈應用

html
<ul class=”list”></ul>
js
var el = document.querySelector(‘.list’);
var farmLen = farms.length;
for(var=0;var<farmLen;i++){
var str = document.creatElement(‘li’);
str.textContent = farms[i].farmer;
el.appendChild(str);
}

Event事件e.target了解目前元素所在位置

html
<input type=”button” value=”click” class=”btn”>
js
var el = document.querySelector(‘.btn’);
el.onclick = function(e){
console.log(e);
}
e是事件產生的資訊 可以是任何變數例如event
e.target顯示點擊元素範圍
e.target.nodeName顯示點擊元素 >>後續可以用if先判斷點擊是我想點擊的東西,後續再做行為

三種HTML元素綁定Event的方式

js
function sayHello(){
alert(‘Hello’);
}
html
<input onclick = “sayHello()” type=”button” value=”click” class=”btn”>
<input onclick = “alert(‘hello’)” type=”button” value=”click” class=”btn”> onclick直接執行程式碼也行

var btn= document.querySelector(‘.btn’);選擇元素綁定
onclick只能綁定一個事件不能兩個
btn.onclick = function(){
alert(‘Hello’);
}

var btn= document.querySelector(‘.btn’);選擇元素綁定
addEventListener能綁定多個事件
btn.addEventListener(‘click’,function(){
alert(‘hello’);
}.false)

stopParpagation避免事件監聽互相衝突

重疊只執行自己,重疊只執行一次,只執行我有間聽到的
var el= document.querySelector(‘.box’);
el.addEventListener(‘click’,function(e){
e.stopPropagation();

}.false)

perventDefault取消HTML元素默認行為

Html
<a class=”link” href=”http://www.google.com”>menu icon</a>
js
var el= document.querySelector(‘.link’);
el.addEventListener(‘click’,function(e){
e.preventDefault();

}.false)
本來會連結到google現在不會

下拉式選單觸發change事件

html
<select id = “areaId”>
<option value=”azone”>A-zone</option>
<option value=”bzone”>B-zone</option>
</select>
<ul id=”list”></ul>
js
var area = document.getElementById(‘areaId’);
var list = document.querySelector(‘.list’);
var len=zone.lengyh;
function updateList(e){
var select=e.target.value;
var str=’’;
for(var i=1;i<len;i++){if (select==zone[i].place){
str+=’<li>’+zone[i].name+’</li>’;
}}
list.innerHTML=str;
}
area.addEventListener(‘change’,updateList,false);

觸發鍵盤keydown事件

var body = document.body;

function goRocket(e){
switch(e.keyCode){
case 49:
document.querySelector(‘.rocket-1’).style.bottom = ‘2000px’
break;
case 50:
document.querySelector(‘.rocket-2’).style.bottom = ‘2000px’
break;
case 51:
document.querySelector(‘.rocket-3’).style.bottom = ‘2000px’
break;
}
}

body.addEventListener(‘keydown’,goRocket,false)

觸發blur事件(離開focus的時候)

function checkContent(e){
var str = e.target.value;
if(str==’’){
alert(‘此欄位不可為空’)
}
}
var el = document.getElementById(‘countId’);
el.addEventListener(‘click’,count,false);

var ham = document.getElementById(‘hamNumId’);
ham.addEventListener(‘blur’,checkContent,false);
var coke = document.getElementById(‘cokeNumId’);
coke.addEventListener(‘blur’,checkContent,false);

觸發mousemove事件

var el = document.querySelector(‘.box’);
el.addEventListener(‘mousemove’,function(){
alert(‘1234’);
},false)

網頁三種座標

function getPosition(e) {
screenX.textContent = e.screenX;
screenY.textContent = e.screenY;
pageX.textContent = e.pageX;
pageY.textContent = e.pageY;
clientX.textContent = e.clientX;
clientY.textContent = e.clientY;
mouseImg.style.left =e.clientX+’px’; 螢幕跟著游標移動
mouseImg.style.top =e.clientY+’px’;
}

var el = document.body;
el.addEventListener(‘mousemove’, getPosition, false);

監聽的優化:由父元素監聽子元素的技巧

var list = document.querySelector(‘.list li’);
li有多個只會監聽第一個

var list = document.querySelector(‘.list’);說明:改監聽父元素
list.addEventListener(‘click’,checkName,false)
function checkName(e){
if(e.target.nodeName!==’LI’){return};說明:return空值程式將不執行
說明:if 才不會監聽到其他不想監聽到的元素
console.log(e.target.textContent);
}

--

--

Steven Wang
Steven Wang

No responses yet