回答要點 Flexbox是什麼javascript
答:Flexbox是一種新的佈局方式,目的是提供一種更加高效的方式對元素進行佈局、對齊、分配空白空間。css
在元素的尺寸未知或動態變化(如%百分比)時也能正常的工做。前端
詳細補充:java
在彈性模型下,會調整元素的尺寸和順序來最好地填充全部可用的空間。當容器的尺寸因爲屏幕大小或窗口尺寸發生變化時,其中包含的元素也會被動態地調整。ajax
舉例:正則表達式
例如,當容器尺寸變大時,其中包含的元素會被拉伸以佔滿多餘的空白空間;當容器尺寸變小時,元素會被縮小以防止超出容器的範圍。json
彈性盒佈局是與方向無關的。數組
傳統的佈局方式中,block 佈局是把塊在垂直方向從上到下依次排列的;瀏覽器
而 inline 佈局則是在水平方向來排列。緩存
彈性盒佈局並無這樣內在的方向限制,能夠由開發人員自由操做。
在不一樣的屏幕下,保證同一行的全部元素可以按照必定的比例填充整行佈局。
舉例:
在進行浮動時,增長了元素的填充和邊框也能動態調整浮動元素在整行的寬度,不至於被擠到下一行顯示。
回答要點:是什麼
css三角採用的是均分原理,以矩形的對角線分配出上、右、下、左4個三角形(在答題紙上畫出圖形)
回答要點:定位有哪些,怎麼用
position:static
元素遵循常規流。top 、right、bottom、left等屬性不會被應用
position:relative
對象遵循常規流,而且參照自身在常規流中的位置經過 <' top '>,<'right '>,<' bottom '>,<'left '>屬性進行偏移時不影響常規流中的任何元素。
position:absolute
對象脫離常規流,使用 <' top '>,<' right '>,<' bottom '>,<' left '>等屬性進行絕對定位,盒子的偏移位置不影響常規流中的任何元素,其margin不與其餘任何margin摺疊。
position:fixed:
對象脫離常規流,使用 <' top '>,<'right '>,<' bottom '>,<'left '>等屬性以窗口爲參考點進行定位,當出現滾動條時,對象不會隨着滾動。
CSS樣式3新增的
position:center:
對象脫離常規流,使用 <' top '>,<'right '>,<' bottom '>,<'left '>等屬性指定盒子的位置或尺寸大小。盒子在其包含容器垂直水平居中。盒子的偏移位置不影響常規流中的任何元素,其margin不與其餘任何margin摺疊。
使用正則表達式
var reg=/^[a-zA-Z]\w{4,19}$/;
reg.test("要判斷的字符串");複製代碼
方法1:
var src ="hnfcedu.com";
var index = src.indexOf(".");
var str = src.substring(index + 1);
console.log(str);複製代碼
方法2:
var reg=/\.com/
var word =reg.exec("hnfcedu.com")[0];
console.log(word)複製代碼
方法一:
function count(str){
var words=[str[0]];//初始化數組,爲字符串的第一個字母
var numbers=[1]; //統計系統字符的數目
for(var i=1;i<str.length;i++){//循環遍歷全部的字母
var w=str[i];//獲取字符
var flag=false; //設置是否出現了相同的標記
for(varj=0;j<words.length;j++){//匹配查找出來的元素
var w2=words[j];
if(w2==w){//有相同的元素
numbers[j]+=1; //累計數目
flag=true;
break;//退出循環
}
}
if(!flag){
words.push(w);//添加新字符
numbers.push(1); //添加數目
}
}
//構建數目最多的字母對象信息
var max={word:words[0],num:numbers[0],index:0};
for(var i=1;i<numbers.length;i++){
if(max.num<numbers[i]){
max.num=numbers[i];
max.index=i;
}
}
max.word=words[max.index];
return max;
}複製代碼
方法2:正則表達式
function count(str) {
str =str.split('').sort().join("");
var reg = /(.)\1{0,}/igm;
var words = str.match(reg);
var maxLen = words[0];
for (var i = 1; i < words.length;i++) {
if(maxLen.length<words[i].length){
maxLen=words[i];
}
}
return maxLen;
}複製代碼
方法一: obj.style.visibility="visible"; obj.style.visibility="hidden";
方法二: obj.style.display="block";obj.style.display="none";
方法三: obj.style.fontSize=0;obj.style.height=0;
console.log("Loglevel");//普通日誌
console.debug("Debuglevel");//調試級別
console.info("Infolevel");//普通消息
console.warn("Warnlevel");//警告信息
console.error("Errorlevel");//錯誤日誌
Number
String
Boolean
Null
Undefined
Object
這個問題我的理解有歧義,是異步加載數據有幾種js方案仍是異步加載js文件有幾種方案?
方案一:使用XMLHttpRequest或是 ActiveXObject(IE)
方法二:使用Worker
方法三:使用Jquery $.ajax()
方法一:async
例如:<script type="text/javascript"src="demo_async.js" async="async"></script>
方法二:defer,只支持IE
例如:<script type="text/javascript"defer="defer"></script>
本人採用的瀏覽器兼容測試工具是 IETester和BrowserShots
function deepClone(obj){
var cloneObject={};//建立空對象
for(var k in obj){
cloneObject[k]=obj[k];
}
return cloneObject;
}複製代碼
我用到過的優化有:
合併請求的主要目的是減小瀏覽器對服務器發起的請求數,從而減小在發起請求過程當中花費的時間。
域名拆分主要是爲了增長瀏覽器下載的並行度,讓瀏覽器能同時發起更多的請求,
異步加載圖片、js、數據等,減小IO的阻塞
將數據緩存在本地,減小數據的請求
對js、css文件進行壓縮
如:var url = "http://www.hnfcedu.com/eg?key0=0&key1=1&key2=2";
答:
var url = "http://www.hnfcedu.com/eg?key0=0&key1=1&key2=2";
function parseQueryString(url){
var index=url.indexOf("?");
var paraStr=url.substring(index+1);
var json=eval("({"+paraStr.replace(/=/igm,":\"").replace(/&/igm,"\",")+"\"})");
console.log(json);
return json;
}
parseQueryString(url);
// { key0: '0', key1: '1', key2: '2' }複製代碼
function A(){
}
function B(){
}
B.prototype=new A();複製代碼
<ul id="test">
<li>這是第一條</li>
<li>這是第二條</li>
<li>這是第三條</li>
</ul>複製代碼
閉包:在JavaScript中局部變量被一個函數引用,變量也是函數中的一部分。
代碼實現:
<script>
var ul = document.getElementById('test');
var list = ul.children;
for(var i=0; i< list.length; i++){
(function (i) {
list[i].onclick = function () {
console.log(i);
}
})(i);// 閉包的行爲
}
</script>複製代碼
<table border="1" align="center" width="400"id="tab">
<thead>
<tr>
<td id="name">姓名</td>
<td id="power">力量</td>
<td id="quick">敏捷</td>
<td id="smart">智力</td>
</tr>
</thead>
<tbody>
<tr id="div0">
<td>衆神之王</td>
<td>19</td>
<td>15</td>
<td>20</td>
</tr>
<tr id="div1">
<td>月之騎士</td>
<td>15</td>
<td>22</td>
<td>15</td>
</tr>
<tr id="div2">
<td>流浪劍客</td>
<td>23</td>
<td>15</td>
<td>14</td>
</tr>
<tr id="div3">
<td>德魯伊</td>
<td>17</td>
<td>24</td>
<td>13</td>
</tr>
</tbody>
</table>複製代碼
答:
<script type="text/javascript">
var tab =document.getElementById("tab");
var tbody = tab.tBodies[0];//獲取tbody對象
var bodies = tbody.children;//獲取以對象
var trs = [];
for(var i = 0; i < bodies.length; i++) {
trs.push(bodies[i]);//對象轉數組
}
var cells = tab.tHead.rows[0].cells;//獲取全部的頭部信息
for (var i = 0; i < cells.length; i++) {
cells[i].onclick = function () {
//獲取點擊對象的排序類型
var sortType = this.sortType;//獲取點擊單元格的排序類型[自定義屬性 sortType]
if (sortType) {//自定義屬性存在
sortType= sortType =="asc" ? "desc" : "asc";//改變排序類型
} else {
sortType = "asc";//默認升序
}
this.sortType = sortType;//添加自定義屬性
//獲取單元格的序號
var index = this.cellIndex;
var results = trs.sort(function (a,b) {//自定義排序邏輯
var aValue =a.cells[index].innerText;//獲取對應單元格的內容
var bValue =b.cells[index].innerText;//獲取對應單元格的內容
var cValue=aValue.localeCompare(bValue);//經過比較決定排序規則
return sortType =="asc"? cValue:-cValue;//作升序或降序排列 正數爲升序,負數爲降序
}); tbody.innerHTML = "";
for (var i = 0; i < results.length;i++) {
tbody.appendChild(results[i]);
}
}
}
</script>複製代碼