JS、JQ相關小技巧積攢

来源:https://www.cnblogs.com/chenboaixuexi/archive/2019/11/18/11886289.html
-Advertisement-
Play Games

JS、JQ相關小技巧積攢,以備不時之需。 1.js 獲取時間差:時間戳相減。new Date().getTime() 獲得毫秒數,除以(1000*60*60*24) 獲得天數。 2.重定向操作:頁面重定向:window.location.href="http://..."即可(本頁頁面跳轉)。 3. ...


JSJQ相關小技巧積攢,以備不時之需。

1.js 獲取時間差:時間戳相減。new Date().getTime()  獲得毫秒數,除以(1000*60*60*24) 獲得天數。

 

2.重定向操作:頁面重定向:window.location.href="http://..."即可(本頁頁面跳轉)。

 

3.js立即執行函數,window.onload = function, $(document).ready({})區別 以及 執行時機 以及 先後順序。

 

4.前臺form表單的提交方式有很多種,例如:

1. form表單submit直接提交的方法

2. Ajax提交的方法  $("form").serialize()  不能提交file文件,如果要表單元素的值包含到序列字元串中,元素必須使用 name 屬性

3. jquery提交的方法

4. 原生js提交的方法  document.forms["importFileForm"].submit();

 

5. 提交附件

前端用 FormData

var formdata = new FormData();

formdata.append("key","value");

如果提交form則  var formdata = new FormData($("#form1")[0]); // 註意構造器參數是Dom對象不是jq對象

 

後端用 FormCollection

public ActionResult xxaction(FormCollection form)

{

         var xx = form["xx"] + "";

         //獲取客戶端上傳的文件集合,即使沒有附件上傳files.Count也大於0,只要表單存在<input type='file' />

    HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;

}

Ajax使用FormData向後臺傳參數時,在ajax參數中加上:

contentType:false,

processData:false

 

6. js通配符選擇器:

^=  以什麼開頭

$=  以什麼結尾

*=  包含什麼

 

7. js數組與字元串相互轉換

數組轉字元串:var arr = new Array(a,b,c,d);   arr.join(",");

字元串轉數組:var str = "abcd";  str.split("");

8. 數組添加元素

var arr = [];

arr.push():// 元素插入數組尾部,返回數組新長度

arr.unshift(): //元素插入數組頭部,返回數組新長度

arr.splice(index,item)://元素插入數組指定索引處

 

9.

$.get("/QM_Price/CheckAtcost",{ "vrid": $("#bjmb").attr("vrid") },function (data) { if (data == "Y") { noAtcost = false; }});

$.post()

都是非同步提交,所以要立即用返回值的情況不能使用此種方法,需要用ajax的同步提交async:false;

 

10. 數組與對象深拷貝  產生副本的是深拷貝,傳遞本身的是淺拷貝

數組:

淺拷貝:

var arr1 = [1,2,3,4];

var arr2 = arr1;

console.log(arr2)  // [1,2,3.4];

arr1[1] = 5;

console.log(arr2) // [1,5,3,4];

深拷貝:

var arr2 = arr1.slice(0);   // 選擇一個數組並返回一個副本

slice(start,end)  start必填,end不填預設是數組結尾   上式表示將數組元素都選了。

var arr2 = [].concat(arr1);// 連接一個空數組並返回一個副本

concat參數可以是任意多個數組或者值   arr1.concat(4,5)的值為  [1,2,3,4,4,5];

 

對象:

淺拷貝:

var obj1 = {"name":"a","age":10};

var obj2 = obj1;

obj1["name"] = "b";

console.log(obj2.name) // "b"

深拷貝:

obj2 = JSON.parse(JSON.stringify(obj1)) ;// 格式化輸出對象

JSON.stringify():格式化json字元串,有三個參數:

value:值,需要格式化的json串

raplace:可選,可以是方法,也可以是數組,一般寫null,作用:可以對json串進行操作,比如大小寫轉換

space:分隔符,數字0-10表示縮進幾個字元。轉義字元:\t表示回車。字元串,表示用什麼分割

JSON.parse():將json字元串轉換成對象

 

11. 篩選器問題

$("input[name='xx'][id='yy']")   兩個[]連一起,表示的是求交集——a且b

$("input[name='xx'],input[name='yy']")  逗號表示並集——a或b(a和b)

 

12. iE瀏覽器相容性問題:

不支持 => 表達式,所以不能用forEach()方法來遍曆數組,拉姆達表達式是ES6的東西

不支持 `  符號(模板字元串),js字元串多行問題。這個是ES6的特性

字元串多行問題解決:\   使用反斜杠,如果寫html片段,註意裡面的屬性值用單引號  '  ,用到雙引號的地方使用  \"  來轉義。

 

13. hasOwnProperty(key):判斷一個對象里是否包含該key值。

 

14. jQuery.extend(true, {}, data[i]):對象深拷貝

 

15.查看項目種jq 的版本:alert('jQuery版本:' + $.fn.jquery); 是否引入了jq:typeof jQuery == undefined

 

16. jq.html() 方法,返回元素的html,不包括本身,第一個子元素的html。

 

17. $.fn.load = function(params...){},重寫jquery的load函數。

fn是函數的原型成員,在js中,每個函數都有兩個對象,一個是函數對象,即函數本身,一個是原型對象。函數的prototype方法指向這個原型對象。

 

18. var start = new Date($("#BeginDate").datebox("getValue").replace(/-/g, "/"));// ‘-’在ie瀏覽器中不能被識別成日期格式在chrome中可以。 ‘/’瀏覽器通用。

 

19. js中浮點型的0 等於 "",等於false

var a = 0;

console.log(a == "") // true

console.log(a == false) // true

 

20. jq offset():只能得到display不為none的元素的值,為none則offset():{top:0,left:0}

 

21. ajax提交後臺的時候,數組無法直接提交,提交後後臺得不到數組或者字元串,得到一個null,用JSON.stringify(); 或者:traditional: true。

 

22. ie瀏覽器緩存問題:ajax每次請求後臺時請求參數相同時,瀏覽器緩存機制會不再次請求後臺,直接讀取上一次的數據,所以每次改一下請求參數即可:

data: {

         param: Math.random()// ie瀏覽器緩存,每次請求參數不一致即可

}

 

23. form表單裡面的button 點擊不刷新頁面  type='button'

 

24. NaN 、"" 、 0 、false 、null 、undefined  這6個值是js的6個假值,取反都是true,除了這幾個,其它都是false。

 

25. history.back();--點擊瀏覽器的回退按鈕

history.go(-1);--等同於history.back(),

如果想要回退的同時再刷新以下頁面,則以上方法不可取,可用以下方法:

window.location.href=document.referrer

 

26.判斷ie版本:

"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)"

 

var useragent = navigator.userAgent;//瀏覽器自帶字串

var re = new RegExp("MSIE (\\d+\\.\\d+)");

re.test(useragent);

RegExp.$1;

 

RegExp 是javascript中的一個內置對象。為正則表達式,RegExp.$1(RegExp["$1"])是RegExp的一個屬性,指的是與正則表達式匹配的第一個子匹配(以括弧為標誌)字元串:

var r= /^(\d{4})-(\d{1,2})-(\d{1,2})$/; //正則表達式 匹配出生日期(簡單匹配)    

r.exec('1985-10-15');

s1=RegExp.$1;

s2=RegExp.$2;

s3=RegExp.$3;

alert(s1+" "+s2+" "+s3)//結果為1985 10 15

 

正則里有一個 lastIndex 的屬性,是下一次匹配的開始位置,test()匹配之後,lastIndex的值是下一次匹配開始的位置

 

27.判斷是否ie

if ("ActiveXObject" in window) {

                console.log("你是ie..");

            } else {

                console.log("你不是");

            }

 

28.判斷是否ie,並且返回版本信息

function IEVersion() {

            // 取得瀏覽器的userAgent字元串

            var userAgent = navigator.userAgent;

            // 判斷是否為小於IE11的瀏覽器

            var isLessIE11 = userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1;

            // 判斷是否為IE的Edge瀏覽器

            var isEdge = userAgent.indexOf('Edge') > -1 && !isLessIE11;

            // 判斷是否為IE11瀏覽器

            var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1;

            if (isLessIE11) {

                var IEReg = new RegExp('MSIE (\\d+\\.\\d+);');

                // 正則表達式匹配瀏覽器的userAgent字元串中MSIE後的數字部分,,這一步不可省略!!!

                IEReg.test(userAgent);

                // 取正則表達式中第一個小括弧里匹配到的值

                var IEVersionNum = parseFloat(RegExp['$1']);

                if (IEVersionNum === 7) {

                    // IE7

                    return 7

                } else if (IEVersionNum === 8) {

                    // IE8

                    return 8

                } else if (IEVersionNum === 9) {

                    // IE9

                    return 9

                } else if (IEVersionNum === 10) {

                    // IE10

                    return 10

                } else {

                    // IE版本<7

                    return 6

                }

            } else if (isEdge) {

                // edge

                return 'edge'

            } else if (isIE11) {

                // IE11

                return 11

            } else {

                // 不是ie瀏覽器

                return -1

            }

        }

 

29. 是否聲明DTD:

控制台輸入:document.compatMode

 

顯示 CSS1Compat:已聲明

 

30.http跨域+cookie跨功能變數名稱

http跨域:

什麼是跨域請求?

瀏覽器同源策略的限制(訪問同源的資源是被瀏覽器允許的,但是如果訪問不同源的資源,瀏覽器預設不允許。訪問不同源的資源就叫做跨域)

什麼是同源策略(Same Origin Policy)?

同源策略,是瀏覽器的一種核心最基本的安全策略。它對來之不同遠的文檔或腳本對當前文檔的讀寫操作做了限制。

同源,即協議相同,功能變數名稱相同,埠相同

為什麼會有跨域問題?

跨域問題只出現在瀏覽器訪問的頁面,因為這是瀏覽器為了保戶用戶安全而製造的策略。假如沒有這層保護,網站就很容易受到跨站偽造請求(CSRF)的攻擊

 

瀏覽器cookie 不能跨功能變數名稱,而不是不能跨域,即同一個IP地址,不同埠(跨域)共用一個cookie。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原因是在使用<if> 進行條件判斷時, 將datetime類型的欄位與 ' ' 進行了判斷,導致的錯誤 解決, 只使用 <if test="createTime != null"></if> 做判斷就行了 詳細可參考: https://blog.csdn.net/wanghailong_qd/art ...
  • Django csrf CSRF 全稱(Cross Site Request Forgery)跨站請求偽造。也被稱為One Click Attack和Session Riding,通常縮寫為CSRF或XSRF。你可以這樣理解:攻擊者(黑客,釣魚網站)盜用了你的身份,以你的 名義發送惡意請求,這些請求 ...
  • mongodb4.2版本的安裝與配置(windows下),史上最全最基礎最詳細+圖解 ...
  • Apache Flink是什麼? ​ 在當代數據量激增的時代,各種業務場景都有大量的業務數據產生,對於這些不斷產生的數據應該如何進行有效的處理,成為當下大多數公司所面臨的問題。隨著雅虎對hadoop的開源,越來越多的大數據處理技術開始涌入人們的視線,例如目前比較流行的大數據處理引擎Apache Sp ...
  • alert日誌報錯: 2019-11-18T07:15:12.704938+08:00Errors in file /u01/app/oracle/diag/rdbms/sibcyb1/SIBCYB111/trace/SIBCYB111_ora_83111.trc (incident=803537) ...
  • 本文微信公眾號「AndroidTraveler」首發。 背景 在開發過程中,調試是必不可少的一項工作。 當我們要確定項目的邏輯時,當我們要瞭解界面的生命周期時,當我們發現新寫的邏輯與期望效果不一致時,當我們覺得數據有問題時...... 而調試有兩種方式: 第一種就是使用 debug 模式運行 APP ...
  • 一、overflow:hidden;作用 (1)可以將超出標簽範圍的內容裁剪掉 (2)清除浮動 .box1{ background-color: red; /*border:1px white solid;*/ overflow: hidden; } .box2{ background-color: ...
  • 字體屬性介紹 中的字體屬性是乾什麼的呢?字體字體肯定和字體有關咯,就是設置 頁面中文本的字體, 中常用的字體屬性有幾種呢,筆者給大家梳理了下,比較常用的一共有 種,今天我們就看看這 種能給文本的字體帶來什麼效果呢。 字體屬性定義文本的字體系列、大小、加粗、風格(如斜體)。 在 中常用的字體屬性有5種 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...