###### tags: `js` # js code ## 基本 ### push ```javascript= var data=[10,20] data.push(30) //data=[10,20,30] ``` ### unshift ```javascript= var data=[10,20] data.unshift(0) //data=[0,10,20] ``` ### 長字串 ```javascript= document.getElementsByClassName("in_text")[0].value='{\ "test":{\ "google":"",\ "some":{\ "not":"",\ "ok":""\ },\ "facebook":"",\ "aws":{\ "face":"",\ "youtube":{\ "channl":"",\ "file":""\ }\ }\ }\ }'; ``` ## js request ### XMLHttpRequest get ```javascript= var xhr = new XMLHttpRequest() var url="https://cors-anywhere.herokuapp.com/"+"https://daan-course.herokuapp.com/api/data?class=%E7%B6%9C%E9%AB%98109%E6%84%9B" xhr.open('GET',url); xhr.onload = function() { var data=JSON.parse(this.responseText) console.log(data) } xhr.send() ``` ### fetch get ```javascript= var url="https://daan-course.herokuapp.com/api/data?class=%E8%B3%87%E8%A8%8A109%E7%94%B2" fetch(url, { "referrer": "https://daan-course.herokuapp.com/", "referrerPolicy": "no-referrer-when-downgrade", "body": null, "method": "GET", "mode": "cors", "credentials": "omit" }).then(function(response) { return response.json(); }).then(function(res) {console.log(res)}) ``` ### fetch post ```javascript= var url="" var send_data={text:"hello"} fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(send_data) }); ``` ## js html 操作 ### 創造html 元素 ```javascript= var div= document.createElement("div") var textarea=document.createElement("textarea") var input= document.createElement("input") var buttun=document.createElement("button") var img=document.createElement("img") ``` ### 加入html 元素 ```javascript= var div= document.createElement("div") document.body.appendChild(div) ``` ### 去除document中html 元素 ```javascript= var div= document.createElement("div") document.body.appendChild(div) div.remove() ``` ### html 元素中的元素(也可以是字串) ```javascript= var div= document.createElement("div") div.innerHTML="some text" console.log(div.innerHTML) ``` ### html 元素事件聆聽 ```javascript= var div= document.createElement("div") div.addEventListener("click",function(){ console.log("clicked") }) ``` ### html 元素 用id 搜尋 ```javascript= var div= document.createElement("div") div.id="content" var getElements= document.getElementsById("content") console.log(getElements) ``` ### html 元素 用class 搜尋 ```javascript= var div= document.createElement("div") div.className="content" var getElements= document.getElementsByClassName("content") console.log(getElements) //輸出為array ``` ### 滑鼠事件 ```javascript= var div= document.createElement("div") div.onmouseover = function(){console.log("mouse over")} ``` ## js物件導向 ```javascript= function create_jsclass() { var obj = {}; var data= { "name":"data", "text":"ok?" } obj.data["text"]="1" obj.some_function=function(indata) { console.log(indata) console.log(obj.data["text"]) } return obj } var new_class=create_jsclass() new_class.some_function("hello") /* will console.log("hello") and console.log("1") */ new_class.data["text"]="2" new_class.some_function("world") /* will console.log("hello") and console.log("2") */ ``` ## callback 常用於非同步function 像是fetch ```javascript= function get_data(url,callback) { fetch(url, { "method": "GET", "mode": "cors" }).then(function(response) { return response.json(); }).then(function(res) { console.log(res) callback(res) }) } ``` ## ()=> 是啥 程序員連function 都懶得打的產物 ()中應該也是可以打參數(我沒試過 正常function ```javascript= var div= document.createElement("div") div.addEventListener("click",function(){ console.log("clicked") }) ``` 使用()=> ```javascript= var div= document.createElement("div") div.addEventListener("click",()=>console.log("clicked")) ``` ## this 是啥 ### event function 中 ```javascript= var image=document.createElement("img") var url="https://instagram.ftpe7-4.fna.fbcdn.net/v/t51.2885-15/e35/121593136_754756898405361_6091500234112087097_n.jpg?_nc_ht=instagram.ftpe7-4.fna.fbcdn.net&_nc_cat=109&_nc_ohc=vjyw0iwQyjMAX898eAW&_nc_tp=18&oh=1449a911bcb4bb25bc7e0772039b41bf&oe=5FB3D671" image.src=url image.onclick = function() { var iw = this.width, ih = this.height; console.log(this) console.log(iw) } ``` 輸出為img html tag 和600 ### function 中 ```javascript= var image=document.createElement("img") var url="https://instagram.ftpe7-4.fna.fbcdn.net/v/t51.2885-15/e35/121593136_754756898405361_6091500234112087097_n.jpg?_nc_ht=instagram.ftpe7-4.fna.fbcdn.net&_nc_cat=109&_nc_ohc=vjyw0iwQyjMAX898eAW&_nc_tp=18&oh=1449a911bcb4bb25bc7e0772039b41bf&oe=5FB3D671" image.src=url function call(e) { console.log(this) } image.addEventListener("click",call,false); document.body.appendChild(image) ``` 輸出為window ### 總結 一般function中為window event function 為觸發該 event的物件 ## e 是啥 ```javascript== var image=document.createElement("img") var url="https://instagram.ftpe7-4.fna.fbcdn.net/v/t51.2885-15/e35/121593136_754756898405361_6091500234112087097_n.jpg?_nc_ht=instagram.ftpe7-4.fna.fbcdn.net&_nc_cat=109&_nc_ohc=vjyw0iwQyjMAX898eAW&_nc_tp=18&oh=1449a911bcb4bb25bc7e0772039b41bf&oe=5FB3D671" image.src=url function call(e) { console.log(e) } image.addEventListener("click",call,false); document.body.appendChild(image) ``` 輸出為MouseEvent **e 通常用來讓 function 擷取該 event 的資料** ## xpath 通常長這樣 /html/body/div[1]/div[2]/div/img ```javascript= function get_xpath(para,xpath,runtime) { let count=0; let tag=xpath.split("/")[runtime+1] let tagname=tag.split("[")[0] let number=1; if (tag.split("[").length!=1) { number=tag.split("[")[1].split("]")[0] number=parseInt(number) } for (let index = 0; index < para.children.length; index++) { const element = para.children[index]; if (element.localName==tagname){ count++; } if (count==number) { if (runtime+1 == xpath.split("/").length-1) { return element } return get_xpath(element,xpath,runtime+1) } } } ``` get_xpath(docment,"/html/body/div[1]/div[2]/div/img",0)