之前個 Post 話有找條 Link 可以用來做 Ajax Search,今日有時間就做好左了。 呢個就係條 Link 個樣 : [/feeds/posts/summary?callback=callcall&max-results=50&q=react&start-index=1&alt=json&orderby=updated](/feeds/posts/summary?callback=callcall&max-results=50&q=react&start-index=1&alt=json&orderby=updated) 原本佢係用來做 RSS 的 (我估),不過佢有支援可以用 Json 輸出,除此之外仲有得 Support JsonP 添。 ### 參數 (估估下) - JsonP 係上面條 URL 度有個 `callback` 的 params,只要你比個名佢,佢就會以 JsonP 的方適去 Response 返來。 - Json 係上面條 URL 度有個 `alt` 的 params,填個 'json' 比佢,就會以 json 的方式 Response 返來。 - Query 係上面條 URL 度有個 `q` 的 params,填你想要搜索的關鍵字比佢,就可以搵返相應的 Result 返來。 ### 實作時遇到的事情 記錄一下在實作時遇到的事情 #### Custom Event 可以為 Dom element 加入 / 觸發自訂的事件。 ```js // select a single dom element const element = document.querySelector('#mydiv'); // your custom event handler element.addEventListener('yourcustomevent', function(evt) { console.log('hi, this is your custom event'); }); // prepare event object const evt = new Event('yourcustomevent'); // dispatch the event. element.dispatchEvent(evt); ``` #### 取得 Dom element (static position) 的 position (relative to window) 如果淨係用 `getBoundingClientRect()` 只可以取得未加入 window.scroll 的 (X,Y) 值,所以實際用起來時一定要加返 (window.scrollX, window.scrollY) 的值才能使用。 ```js // select a single dom element const element = document.querySelector('#mydiv'); // get position element.getBoundingClientRect().top + window.scrollY; ``` #### text-overflow: ellipsis; 用唔到 解決 : https://stackoverflow.com/questions/17779293/css-text-overflow-ellipsis-not-working 就係要必需設定對上一個 block element 的以下 CSS: ```css div.text-overflow { overflow: hidden; white-space: nowrap; } ``` #### encodeURIComponent 記得由 User input 的資料要放入去 URL 時,都一定要做好 `encodeURIComponent()` 先得。 ```js // 由使用者自己輸入 const userInputValue = 'hello world'; // 必定要做好 encodeURIComponent 才能放心 const url = `https://example.com/api/v1/users?name=${encodeURIComponent(userInputValue)}`; ``` #### 記住用 : DOMContentLoaded 呢度 : https://stackoverflow.com/questions/9899372/vanilla-javascript-equivalent-of-jquerys-ready-how-to-call-a-function-whe 如果想安全啲,記得要係呢個 event 入面先好操作 Dom elements。 以前 IE6 年代件用 `window.onload = function() { ... }`; 到到 jQuery 年度用 `$(function() { ... })`; 到翻 Vanilla Javascript 返璞歸真,用下面呢個例子 : ```html // fire when dom content loaded document.addEventListener('DOMContentLoaded', function(evt) { // Your code to run since DOM is loaded and ready }); ``` ### 總結 唔寫低真係會唔記得,上面操作做過無數次,不過每次都係要 Search 下 Google 有無更好的做法。 而都係必需既,可能過幾篇文章又會再寫過呢啲一樣既野。