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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...