亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

前端女神告訴你每日前端題

2024-04-27 15:16:48
字體:
來源:轉載
供稿:網友


前端HR告訴你每日前端題(進Web前端交流群0007領取工具和資料)

1、使用原生JS寫一個兼容主流瀏覽器的事件添加和刪除封裝函數

var eventUtil={

                           addEvent:function(ele,type,handler){

                                    if(ele.addEventListener){

                                              ele.addEventListener("on"+type,handler,false)

                                    }elseif(ele.attachEvent){

                                              ele.attachEvent(type,handler)

                                    }else{

                                              ele.["on"+type]=handler

                                    },

                           removeEvent:function(ele,type,handler){

                                    if(ele.removeEventListener){

                                              ele.removeEventListener(type,handler,false)

                                    }elseif(ele.detachEvent){

                                              ele.detachEvent("on"+type,handler)

                                    }else{

                                              ele["on"+type]=null

                                    }

                           }

                  }

2、冒泡排序

var arr = [15,2,6,8,10,9];

for (var i = 0; i < arr.length-1; i++) {

   for (var j = 0; j < arr.length-i-1; j++) {

       if(arr[j] < arr[j+1]){

           var temp = arr[j+1];

           arr[j+1] = arr[j];

           arr[j] = temp;

       }

   }

}

console.log(arr);

3、jQuery對象和DOM對象相互轉換

// 1. DOM對象轉成 jQuery對象

//對于已經是一個 DOM對象,只需要用 $()把DOM對象包裝起來,就可以獲得一個 jQuery對象了,$(DOM對象)注: var是定義變量

//如:

var v =document.getElementById("v"); //DOM對象

var $v = $(v); //jQuery對象

//轉換后,就可以任意使用 jQuery的方法。

// 2. jQuery對象轉成 DOM對象

//兩種轉換方式講一個 jQuery對象轉換成 DOM對象: [index]和 .get(index);

// (1) jQuery對象是一個數據對象,可以通過 [index]的方法,來得到相應的 DOM對象。

//如:

var $v = $("#v"); //jQuery對象

var v = $v[0]; //DOM對象

// alert(v.checked); //檢測這個checkbox是否被選中

// (2) jQuery本身提供,通過.get(index)方法得到相應的 DOM對象

//如:

var $v = $("#v"); //jQuery對象

var v = $v.get(0); //DOM對象 ($v.get()[0]也可以 )

4、從用戶輸入一個網址到網頁最終展現到用戶面前,中間究竟發生了什么?

/*

大致流程總結如下:

1.輸入地址

2.瀏覽器查找域名的 ip地址(這一步包括 DNS具體的查找過程,包括:瀏覽器緩存->系統緩存->路由器緩存...)

3.瀏覽器向 web服務器發送一個 HTTP請求

4.服務器的永久重定向響應(從http://example.com到 http://www.example.com)

5.瀏覽器跟蹤重定向地址

6.服務器處理請求

7.服務器返回一個 HTTP響應

8.瀏覽器顯示 HTML

9.瀏覽器發送請求獲取嵌入在 HTML中的資源(如圖片、音頻、視頻、CSS、JS等等)

10.瀏覽器發送異步請求

*/

5、關于跨域,以及跨域的幾種方式?

首先我們來想一想

            為什么會有跨域這個名詞的出現呢?

            跨域又是什么呢?為何要跨域?

            瀏覽器的同源策略又是什么?怎么解決?

             jsonp又是什么?

            跨域的原理又是什么呢?

名詞解釋:

跨域:

瀏覽器對于javascript的同源策略的限制,例如a.cn下面的js不能調用b.cn中的js,對象或數據(因為a.cn和b.cn是不同域),所以跨域就出現了.

上面提到的,同域的概念又是什么呢???簡單的解釋就是相同域名,端口相同,協議相同

 

同源策略:

請求的url地址,必須與瀏覽器上的url地址處于同域上,也就是域名,端口,協議相同.

比如:我在本地上的域名是study.cn,請求另外一個域名一段數據

 

這個時候在瀏覽器上會報錯:

 

這個就是同源策略的保護,如果瀏覽器對Javascript沒有同源策略的保護,那么一些重要的機密網站將會很危險~

study.cn/json/jsonp/jsonp.html

 請求地址        形式        結果

 http://study.cn/test/a.html  同一域名,不同文件夾   成功

 http://study.cn/json/jsonp/jsonp.html  同一域名,統一文件夾   成功

 http://a.study.cn/json/jsonp/jsonp.html       不同域名,文件路徑相同        失敗

 http://study.cn:8080/json/jsonp/jsonp.html 同一域名,不同端口       失敗

 https://study.cn/json/jsonp/jsonp.html 同一域名,不同協議         失敗

 

 

 

 

 

 

 

jsonp:

jsonp 全稱是JSON with Padding,是為了解決跨域請求資源而產生的解決方案,是一種依靠開發人員創造出的一種非官方跨域數據交互協議。

一個是描述信息的格式,一個是信息傳遞雙方約定的方法。

jsonp的產生:

1.Ajax直接請求普通文件存在跨域無權限訪問的問題,不管是靜態頁面也好.

2.不過我們在調用js文件的時候又不受跨域影響,比如引入jquery框架的,或者是調用相片的時候

3.凡是擁有scr這個屬性的標簽都可以跨域例如<script><img><iframe>

4.如果想通過純web端跨域訪問數據只有一種可能,那就是把遠程服務器上的數據裝進js格式的文件里.

5.而json又是一個輕量級的數據格式,還被js原生支持

6.為了便于客戶端使用數據,逐漸形成了一種非正式傳輸協議,人們把它稱作JSONP,該協議的一個要點就是允許用戶傳遞一個callback 參數給服務端,

demo1:基于script標簽實現跨域

舉個例子:我在http://study.cn/json/jsonp/jsonp_2.html下請求一個遠程的js文件

 

 

 1<!DOCTYPE html>

 2<html>

 3<head>

 4<meta charset="UTF-8">

 5<title>Insert title here</title>

 6

 7<script type="text/javascript">

 8    var message = function(data) {

 9        alert(data[1].title);

10    };

11 </script>

12

13 <scripttype="text/javascript" src="http://web.cn/js/message.js"></script>

14 </head>

15 <body>

16 <div id='testdiv'></div>

17 </body>

18 </html>

 

 

 

 

遠程的message.js文件是

 

 1message([

 2     {"id":"1", "title":"天津新聞聯播,雷人搞笑的男主持人"},

 3     {"id":"2", "title":"樓市告別富得流油專家:房價下跌是大概率事件"},

 4     {"id":"3","title":"法國人關注時事八成年輕人每天閱讀新聞"},

 5     {"id":"4", "title":"新聞中的歷史,歷史中的新聞"},

 6     {"id":"5", "title":"東陽新聞20140222"},

 7     {"id":"6", "title":"23個職能部門要增加新聞發布頻次"},

 8     {"id":"7", "title":"《貴州新聞聯播》中國美麗鄉村"},

 9     {"id":"8", "title":"朝韓離散家屬團聚首輪活動結束"},

10     {"id":"9", "title":"索契冬奧會一天曝出兩例興奮劑事件"},

11     {"id":"10", "title":"今天中國多地仍將出現中度霾"}

12 ]);

 

 

這個時候我們得到的相應頭是:

 

這樣就實現跨域成功了,因為服務端返回數據時會將這個callback參數(message)作為函數名來包裹住JSON數據,這樣客戶端就可以隨意定制自己的函數來自動處理返回數據了。

demo2: 基于script標簽實現跨域

讓遠程js知道它應該調用的本地函數叫什么名字,只要服務端提供的js腳本是動態生成的就好了,這樣前臺只需要傳一個callback參數過去告訴服務端,我需要XXX代碼,于是服務端就會得到相應了.

例如在http://study.cn/json/jsonp/jsonp_3.html頁面請求 http://192.168.31.137/train/test/jsonpthree

 

 1<!DOCTYPE html>

 2<html>

 3<head>

 4<meta charset="UTF-8">

 5<title>Insert title here</title>

 6

 7<script type="text/javascript">

 8    var messagetow = function(data){

 9        alert(data);

10    };

11    var url ="http://192.168.31.137/train/test/jsonpthree?callback=messagetow";

12    var script = document.createElement('script');

13    script.setAttribute('src', url);

14    document.getElementsByTagName('head')[0].appendChild(script);

15 </script>

16 </head>

17 <body>

18 </body>

19 </html>

 

 

得到的響應頭是:

 

demo3:  基于jquery跨域

那么如何用jquery來實現我們的跨域呢???jquery已經把跨域封裝到ajax上了,而且封裝得非常的好,使用起來也特別方便

如果是一般的ajax請求:

 

 1    $.ajax({

 2        url:'http://192.168.31.137/train/test/testjsonp',

 3        type : 'get',

 4        dataType : 'text',

 5        success:function(data){

 6            alert(data);

 7        },

 8        error:function(data){

 9            alert(2);

10        }       

11    });

 

 

那么在瀏覽器中會報錯:

 

 

jsonp形式的ajax請求:并且通過get請求的方式傳入參數,注意:跨域請求是只能是get請求不能使用post請求

 

 1<!DOCTYPE html>

 2<html>

 3<head>

 4<meta charset="UTF-8">

 5<title>Insert title here</title>

 6<script type="text/javascript"src="./js/jquery.js"></script>

 7<script type="text/javascript">

 8$(document).ready(function(){

 9    var name = 'chenshishuo';

10    var sex = 'man';

11    var address = 'shenzhen';

12    var looks = 'handsome ';

13     $.ajax({

14         type : 'get',

15         url:'http://192.168.31.137/train/test/testjsonp',

16        data : {

17            name : name,

18            sex : sex,

19            address : address,

20            looks : looks,

21        },

22        cache :false,

23        jsonp: "callback",

24        jsonpCallback:"success",

25        dataType : 'jsonp',

26        success:function(data){

27            alert(data);

28        },

29        error:function(data){

30            alert('error');

31        }       

32    });

33 });

34 </script>

35 </head>

36 <body>

37 <input id='inputtest' value='546'name='inputtest'>

38 <div id='testdiv'></div>

39 </body>

40 </html>

 

 

jsonp傳遞給請求處理程序或頁面的,用以獲得jsonp回調函數名的參數名(默認為:callback)

jsonpCallback自定義的jsonp回調函數名稱,默認為jQuery自動生成的隨機函數名

看看請求頭和相應頭吧

請求頭:jquery會自動帶入callback參數,當服務端獲取到這個參數后,返回回來.(響應頭)

 

 

現在是不是明白了跨域的基本原理,和基本的使用方法呢??

上面我們說到img中的src可以自動調用遠程圖片的(這個比較簡單我在這里就不說了)

還有ifram請求:

基于iframe實現的跨域要求兩個域具有aa.xx.com,bb.xx.com這種特點,

也就是兩個頁面必須屬于一個基礎域(例如都是xxx.com),使用同一協議和同一端口,這樣在兩個頁面中同時添加document.domain,就可以實現父頁面調用子頁面的函數

要點就是 :通過修改document.domain來跨子域

demo4: 通過iframe來跨子域

http://a.study.cn/a.html請求http://b.study.cn/b.html

在a.html:

 

 1<!DOCTYPE html>

 2<html>

 3<head>

 4<meta charset="UTF-8">

 5<title>Insert title here</title>

 6        <script type="text/javascript">

 7            document.domain = 'study.cn';

 8            function test() {

 9                alert(document.getElementById('a').contentWindow);

10            }

11        </script>

12 </head>

13 <body>

14    <iframe id='a' src='http://b.study.cn/b.html' onload='test()'>

15 </body>

16 </html>

 

 

 在b.html:

 

 1<!DOCTYPE html>

 2<html>

 3<head>

 4<meta charset="UTF-8">

 5<title>Insert title here</title>

 6

 7<script type="text/javascript">

 8document.domain = 'study.cn';

 9</script>

10 </head>

11 <body>

12    我是b.study.cn的body

13 </body>

14 </html>

 

 

 運行效果截圖:

 

我們就可以通過js訪問到iframe中的各種屬性和對象了

如果你想在http://a.study.cn/a.html頁面中通過ajax直接請求頁面http://b.study.cn/b.html,即使你設置了相同的document.domain也還是不行的.

所以修改document.domain的方法只適用于不同子域的框架(父類與子類)間的交互。

如果想通過使用ajax的方法去與不同子域間的數據交互或者是js調用,只有兩種方法,一種是使用jsonp的方法外,還有一種是使用iframe來做一個代理。

原理就是讓這個 iframe載入一個與你想要通過ajax獲取數據的目標頁面處在相同的域的頁面,所以這個iframe中的頁面是可以正常使用ajax去獲取你要的數據的,

然后就是通過我們剛剛講得修改document.domain的方法,讓我們能通過js完全控制這個iframe,這樣我們就可以讓iframe去發送ajax請求,然后收到的數據我們也可以獲得了。

6、如何水平垂直居中?

<!DOCTYPE html>

<html lang="en">

<head>

        <metacharset="UTF-8">

        <title>flex布局</title>

        <styletype="text/css">

                  #box{width:800px;height: 680px;border: 5px solid deeppink;margin: 10px auto;display:flex;justify-content: center;align-items: center;}

                  #boxdiv{width: 120px;height: 80px;background: red;border: 5px solid #ccc;}

        </style>

</head>

<body>

        <divid="box">

           <divclass="h100">1</div>

        </div>

</body>

</html>

7、常見的兼容性問題

/*

1 ie6.0橫向margin加倍

產生因素:塊屬性、float、有橫向margin。

解決方法:display:inline;

2 ie6.0下默認有行高

解決方法:overflow:hidden;或font-size:0;或line-height:xx px;

3在各個瀏覽器下img有空隙(原因是:回車。)

解決方法:讓圖片浮動。

4一個父標簽與幾個子標簽嵌套,父標簽不浮動,子標簽float,子標簽不撐開父的高度。

 

解決方法:a在子標簽最后清浮動{<divstyle="height:0;clear:both;">&nbsp;</div>}

                 b父標簽添加{overflow:hidden;}

                 c給父標簽設置高度

5 Ie6下,不識別最大寬、高度和最小寬高度,意即min-width/height和Max-width/height在ie6中沒效果,

解決方法:(1):.abc{border:1px blue solid;width:200px;height:200px;}

                         html>body.abc{width:auto;height:auto;min-width:200px;min-height:200px;}

       (2):.abc{width:200px;height:200px;_width:200px;_height:200px;}(因為ie6有一個特征,當定義一個高度時,如果內容超過高度,元素會自動調整高度。)

6 Ie6里面:如li設寬、高,并且li里面的標簽浮動,那么li之間會有間距

解決方法:li不設寬、高或者li內的標簽不浮動

7 li之間有間距

解決方法:li設置vertical-align:middle;

8 3像素問題:ie6下,當浮動元素與流動元素并列顯示時,他們之間會存在三像素問題。

 

  解決方法:用hack技術,例如:所有瀏覽器通用height:100px;

                                                 ie6專用_height:100px;

                                                 ie7專用*+height:100px;

                                                 ie6/ie7共用*height:100px;

9當定義行內元素為包含框時,且包含框包含的絕對定位元素以百分比為單位進行定位時,會出現混亂。

 

   解決方法:在行內元素里加入{zoom:1;}

10當多個浮動元素中間夾雜著HTML注釋語句時,如果浮動元素寬度為100%,則在下一行多顯示一個上一行最后一個字符。

       解決辦法:給浮動元素添加display:inline;。

11 opacity定義元素的不透明度

 filter:alpha(opacity=80);ie支持該屬性

 opacity:0.8;支持css3的瀏覽器

12兩個塊元素,豎向的margin值不增加,會重疊,其間距為最大margin值。

13優先級:被!important注明的css屬性具有最高優先級(.abc{color:red!important;})。但在ie6中!important具有一個bug:在同一組css屬性中,!important不起作用。

14火狐不識別background-position-y或background-position-x;

15 ie6不支持 fixed

*/

8、輸出明天日期

function GetDateStr(AddDayCount) {

                     var dd = new Date();

                     dd.setDate(dd.getDate()+AddDayCount);//獲取                                                                            AddDayCount天后的日期

                     var y = dd.getFullYear();

                     var m = dd.getMonth()+1;//獲取當前月份的日期

                     var d = dd.getDate();

                     return y+"-"+m+"-"+d;

                  }

                   

                  document.write("前天:"+GetDateStr(-2));

                  document.write("<br/>昨天:"+GetDateStr(-1));

                  document.write("<br/>今天:"+GetDateStr(0));

                  document.write("<br/>明天:"+GetDateStr(1));

                  document.write("<br/>后天:"+GetDateStr(2));

                  document.write("<br/>大后天:"+GetDateStr(13));


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本精品视频在线| 日韩女优人人人人射在线视频| 青青久久aⅴ北条麻妃| 自拍偷拍亚洲在线| 亚洲九九九在线观看| 国产精品久久久久久久一区探花| 成人看片人aa| 国产精品第二页| 欧美日韩国产色视频| 美女扒开尿口让男人操亚洲视频网站| 97视频在线观看免费高清完整版在线观看| 亚洲欧美在线一区二区| 91精品国产91久久| 亚洲一区中文字幕| 国产精品7m视频| 91视频8mav| 国产成人aa精品一区在线播放| 欧美日韩电影在线观看| 亚洲一区二区三区在线免费观看| 最近2019中文免费高清视频观看www99| 亚洲曰本av电影| 91精品国产高清| 日韩在线视频免费观看| 国产色婷婷国产综合在线理论片a| 日韩av一卡二卡| 国产97在线|亚洲| 亚洲精品v天堂中文字幕| 国产精品xxx视频| 欧美丰满少妇xxxxx| 日韩亚洲欧美成人| 国产精品久久久久影院日本| 日韩成人av网址| 久久久久久久香蕉网| 国产精品久久91| 成人黄色在线观看| 亚洲精品福利在线观看| 欧美精品videosex牲欧美| 在线午夜精品自拍| 欧美日韩在线观看视频| 91久久久久久国产精品| 久久久伊人欧美| 国产经典一区二区| 成人免费在线视频网址| 91精品视频一区| 黑人狂躁日本妞一区二区三区| 亚洲三级 欧美三级| 91久久久久久久久久久久久| 91精品国产一区| 国产精品视频专区| 日韩的一区二区| 精品国模在线视频| 亚洲日韩中文字幕在线播放| 久久久www成人免费精品张筱雨| 国产91在线高潮白浆在线观看| 久精品免费视频| 最新中文字幕亚洲| 亚洲精品97久久| 国产美女精品免费电影| 成人天堂噜噜噜| 欧美另类69精品久久久久9999| 亚洲丝袜一区在线| 狠狠久久五月精品中文字幕| 亚洲国产精品电影在线观看| 国产日韩av高清| 久久福利网址导航| 欧美二区在线播放| 主播福利视频一区| 欧美一级电影在线| 久久中文字幕视频| 国产精品扒开腿做爽爽爽的视频| 黄网站色欧美视频| 国产精品久久久久久超碰| 欧美在线视频在线播放完整版免费观看| 国产一区二区三区网站| 欧美在线精品免播放器视频| 日本sm极度另类视频| 成人激情av在线| 亚洲欧美中文在线视频| 大桥未久av一区二区三区| 国产精品日韩专区| 2021久久精品国产99国产精品| 欧美一级电影在线| 韩国精品美女www爽爽爽视频| 亚洲xxxx视频| 久久精品成人欧美大片| 中文字幕在线精品| 国产精品久久久久高潮| 国产精品日韩专区| 97在线精品视频| 九九热在线精品视频| 韩国三级日本三级少妇99| 日韩精品视频中文在线观看| 午夜精品一区二区三区在线播放| 成人午夜一级二级三级| 上原亚衣av一区二区三区| 亚洲自拍高清视频网站| 国产精品视频自在线| 午夜精品免费视频| 国产盗摄xxxx视频xxx69| 欧美理论电影在线观看| 蜜臀久久99精品久久久无需会员| 国产在线视频不卡| 日韩成人小视频| 日本国产高清不卡| 91精品成人久久| 亚洲欧洲美洲在线综合| 久久6精品影院| 欧美日韩激情小视频| 精品一区二区亚洲| 日韩免费观看网站| 国产欧美精品xxxx另类| 国产成人免费av| 久久久精品一区| 成人日韩在线电影| 视频在线观看一区二区| 日韩中文在线不卡| 精品日本高清在线播放| 欧美成人性生活| 亚洲免费av片| 国产欧美精品在线| 美女999久久久精品视频| 久久99国产精品自在自在app| 欧美不卡视频一区发布| 久久香蕉国产线看观看网| 久久免费观看视频| 欧美人与物videos| 不卡在线观看电视剧完整版| 欧美国产日韩免费| 久久精品久久久久久国产 免费| 亚洲成人黄色网址| 久久91精品国产91久久久| 国产欧美日韩中文字幕| 久久天天躁日日躁| 久操成人在线视频| 欧美高清视频在线播放| 欧美高清视频一区二区| 午夜精品一区二区三区视频免费看| 一区三区二区视频| www欧美日韩| 亚洲成色777777女色窝| 北条麻妃一区二区三区中文字幕| 97视频在线观看亚洲| 欧美精品18videos性欧| 成人免费网视频| 国产精品久久久久久亚洲影视| 97视频在线观看播放| 欧美在线视频一区二区| 久久精品在线播放| 国产精品一区二区三区久久| 日韩大片在线观看视频| 亚洲精品一区二三区不卡| 色妞欧美日韩在线| 91色在线视频| 亚洲精品小视频| 中文字幕亚洲图片| 深夜福利一区二区| 亚洲精品免费在线视频| 欧美性xxxx18| 91精品国产免费久久久久久| 亚洲一区二区久久久久久| 国产精品va在线播放我和闺蜜| 国产成人精品在线| 欧美激情一区二区三区在线视频观看| 91久久久久久久久久久|