侵入式JavaScriptjavascript
jQuery出現之前,在同一個文件中混雜JavaScript代碼和HTML標記是很是流行的作法。將JavaScript代碼做爲某個特性的值放入HTML元素中是很常見的,如如下代碼:html
<div onclick="javascript:alert('click');">Testing, testing</div>
非侵入式JavaScript前端
jQuery改變了這種狀況,由於jQuery提供了查找元素和捕獲單擊事件更好的方法。如今能夠從HTML特性中移除JavaScript代碼了。事實上,能夠將javascript代碼與HTML徹底分離。java
即便查看視圖渲染的HTML標記,也看不到任何的javascript代碼,腳本留下的惟一的痕跡是一個或多個引用javascript文件的<script>標籤。jquery
var keyVal= $("#key").val(); if(keyVal==undefined || keyVal=="" || keyVal==null){ alert("隱藏域的值爲空"); }
此方法效率不高,不建議。chrome
var keyVal= $("#key").val(); if(keyVal.length==0){ alert("隱藏域的值爲空"); }
此方法效率高。json
text()和html()均可以用於元素文本的存取,可是html()不只能夠用於元素文本的存取,還能夠用於元素節點的存取。後端
val()不一樣於text()和html(),val()用於input節點內容的存取。數組
1. text()瀏覽器
<div>text</div>
var text = $("div").text(); //div元素
console.log(text);
console:text
2. html()
<div><p>text</p></div>
var str = $("div").html();
console.log(str);
console:<p>text</p> //取到了元素節點
3. val()
<input type="text" value="text"/>
var str = $("input").val(); //只用於input元素
console.log(str);
console:text
var timer= (<%=System.Web.Configuration.WebConfigurationManager.AppSettings["homeTimer"]%>);
setTimeout('myrefresh()', timer); //指定x秒刷新一次
二進制輸出:toString函數
var m=3;
m.toString(2);
結果 "11"
NumberObject.toString(radix)
Radix:規定表示數字的基數,使 2 ~ 36 之間的整數。若省略該參數,則使用基數 10。
function newGuid() { var guid = ""; for (var i = 1; i <= 32; i++){ var n = Math.floor(Math.random()*16.0).toString(16); guid += n; if((i==8)||(i==12)||(i==16)||(i==20)) guid += "-"; //可不要 } return guid; }
完整方法,採用正則:
var r=/^[1-9][0-9]+$/gi; document.writeln(r.test("011"));//false document.writeln(r.test("11"));//true
按照特定需求來定正則:
若輸入的首位能夠是0,則 var r=/^[0-9]+$/gi;
若輸入的能夠爲空,則 var r=/^[0-9]*$/gi;
若輸入的能夠爲負數,則var r = /^(-)?([0-9]*)$/i;
若輸入的能夠含小數點【實際上js中Number是能夠爲小數的】,則var r = /^(-)?([0-9]*)(.)?([0-9]{2})$/i; 兩位小數
參考:jquery裏判斷是否爲數字的各類方法及每種方法的優缺點
注意,上面的正則存在:相同的正則屢次調用test()返回的值卻不一樣的問題
舉例:
var reg = /^1[345678][0-9]{9}$/g; console.log(reg.test(15328044636)); console.log(reg.test(15328044636));
會發現控制檯打印的數據倒是:
true
false
問題緣由:這是由於正則reg
的g
屬性,設置的全局匹配。RegExp
有一個lastIndex
屬性,來保存索引開始位置。
上面的問題,第一次調用的lastIndex
值爲0,到了第二次調用,值變成了11。
解決方案
g
去掉,關閉全局匹配。lastIndex
的值設置爲0。var reg = /^1[345678][0-9]{9}$/g; console.log(reg.lastIndex, reg.test(15328044636)); reg.lastIndex = 0; console.log(reg.lastIndex, reg.test(15328044636)); //打印的值 0 true 0 true
最近遇到調接口返回的字符串中含 & ,到界面顯示確成了 & 。
轉義字符:
參考:【轉義字符】HTML 字符實體< >: &等
默認狀況下中文,空格,‘&’等字符都會被瀏覽器自動轉義一次。
自定義轉換方法:
/** * @function escapeHTML 轉義html腳本 < > & " ' * @param a - * 字符串 */ escapeHTML: function(a){ a = "" + a; return a.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");; }, /** * @function unescapeHTML 還原html腳本 < > & " ' * @param a - * 字符串 */ unescapeHTML: function(a){ a = "" + a; return a.replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&").replace(/"/g, '"').replace(/'/g, "'"); },
1,escapeHTML將< > & " '轉成字符實體
使用場景:
(1)用戶在頁面中錄入(好比輸入框) <script>alert(2);</script>, js將該內容提交給後端保存
(2)顯示時,後端將字符串返回前端;js接收到以後:
a, 使用escapeHTML,將字符串轉爲 <script>alert(2);</script>此時,瀏覽器將能正確解析,由於瀏覽器接收到實體字符後,轉成對應的尖括號等。
b, 不使用escapeHTML,瀏覽器一看到<,便認爲是html標籤的開始,直接把剛纔的字符串當腳本執行了,這就是xss漏洞。
2,unescapeHTML將字符實體轉成< > & " '
使用場景:
後端將已經轉義後的內容顯示到頁面;好比<script>alert(2);</script>
js收到後:
a,前端進行unescapeHTML,則能夠直接dom操做,將標籤顯示到頁面。
b,前端沒有unescapeHTML,則原樣輸出<script>alert(2);</script>,但此時並無執行。
一、打開新窗體【另開窗口】:window.open(url, '_blank');
二、刷選當前窗口:window.location.reload();
三、刷新當前頂層窗口:window.top.location.reload(); 【eg:使用了artDialog 彈出窗口,在窗口上進行操做時,想操做原窗口,須要用window.top】
有時定義一個數組:var array=[ ]; 而後賦值array=" "; 此時判斷其長度length=1。須要將空字符串刪掉
/** * 擴展Array方法, 去除數組中空白數據 */ Array.prototype.notempty = function() { var arr = []; this.map(function(val, index) { //過濾規則爲,不爲空串、不爲null、不爲undefined,也可自行修改 if (val !== "" && val != undefined) { arr.push(val); } }); return arr; }
//調用方法
var a = [1, 2, undefined, 4, "", 5, null, 7, 0, 8];
var b = a.notempty();
//輸出b [1, 2, 4, 5, 7, 0, 8]
一、讀取cookie:var x = document.cookie;
二、設置cookie:document.cookie="username=John Doe";
三、刪除cookie:相似設置,document.cookie="username="; 或者設置一個過時的時間
//設置某個key的cookie值 function setCookie(cname,cvalue,exdays){ var d = new Date(); d.setTime(d.getTime()+(exdays*24*60*60*1000)); var expires = "expires="+d.toGMTString(); document.cookie = cname+"="+cvalue+"; "+expires; } //獲取某個特定key的cookie值 function getCookie(cname){ var name = cname + "="; var ca = document.cookie.split(';'); for(var i=0; i<ca.length; i++) { var c = ca[i].trim(); if (c.indexOf(name)==0) { return c.substring(name.length,c.length); } } return ""; } function checkCookie(){ var user=getCookie("username"); if (user!=""){ alert("歡迎 " + user + " 再次訪問"); } else { user = prompt("請輸入你的名字:",""); if (user!="" && user!=null){ setCookie("username",user,30); } } }
更多參考:JavaScript Cookie
須要引入 jquery.json.js
$(function () { var data = { orderID: "ModelOrderID", pnr: "hello" }; var jsonStr = $.toJSON(data); //把數組轉換成json字符串 console.log(jsonStr); var json = $.parseJSON(jsonStr); //將json字符串反序列化爲json對象 console.log(json); })
分部輸出:
{"orderID":"ModelOrderID","pnr":"hello"}
和
$.grep() 函數使用指定的函數過濾數組中的元素,並返回過濾後的數組。
提示:源數組不會受到影響,過濾結果只反映在返回的結果數組中。
$.grep( array, function [, invert ] )
參數 |
描述 |
array |
Array類型 將被過濾的數組。 |
function |
Function類型 指定的過濾函數。grep()方法爲function提供了兩個參數:其一爲當前迭代的數組元素,其二是當前迭代元素在數組中的索引。 |
invert |
可選。 Boolean類型默認值爲false,指定是否反轉過濾結果。若是參數invert爲true,則結果數組將包含function返回false的全部元素。 |
如下示例:
var arr =$.grep( [0,1,2], function(n,i){ return n > 0; }); console.log(arr);//[1,2] var arr =$.grep( [0,1,2], function(n,i){ return n > 0; },true);//返回n<=0的元素 console.log(arr);//[0]
在jquery中,遍歷對象和數組,常常會用到$().each和$.each(),兩個方法。
一、$().each 在dom處理上面用的較多。
若是頁面有多個input標籤類型爲checkbox,對於這時用$().each來處理多個checkbook,例如:
$(「input[name=’ch’]」).each(function(i){ if($(this).attr(‘checked’)==true) { //一些操做代碼 }
回調函數是能夠傳遞參數,i就爲遍歷的索引。
二、遍歷一個數組一般用$.each()來處理
例如:
$.each([{name:"limeng",email:"xfjylimeng"},{name:"hehe",email:"xfjylimeng"}],function(i,n) { alert("索引:"+i+"對應值爲:"+n.name); }); //參數i爲遍歷索引值,n爲當前的遍歷對象. var arr1 = [ "one", "two", "three", "four", "five" ]; $.each(arr1, function(){ alert(this); }); //輸出:one two three four five var arr2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] $.each(arr2, function(i, item){ alert(item[0]); }); //輸出:1 4 7 var obj = { one:1, two:2, three:3, four:4, five:5 }; $.each(obj, function(key, val) { alert(obj[key]); }); //輸出:1 2 3 4 5
錨點其實就是可讓頁面定位到某個位置上的點。在高度較高的頁面中常常見到。
有如下幾種方式:
一、a標籤href=#XX和id
來綁定錨點
在html 4.0之前,只有使用 <a> 標籤的 name 屬性才能建立片斷標識符。id 屬性的出現建議用id,由於 id 標識符幾乎能夠用在全部的標籤中。
eg:<a href="#a01"></a>
<p id="a01">練習</p>
<p>練習</p>
很差,頁面會有刷新感
二、 scrollIntoView()
參考:https://blog.csdn.net/qq_38047742/article/details/82621666
Element.scrollIntoView() 方法讓當前的元素滾動到瀏覽器窗口的可視區域內
錨點定位是一個再熟悉不過的操做了,一般會用a標籤href=#XX去實現,不過這樣作,有一個問題,就是頁面會有刷新感,並且地址欄會有變化,F5刷新,則#XXX仍是顯示在地址欄裏,這樣若是要進一步進行有關地址欄url的操做,就不得再也不作些判斷,因此尋找一些新的方法。
若是要求不是很高,scrollIntoView()這個方法就能夠取代傳統錨點定位,它是利用滾動原理,來將相應的元素滾動到但是區域內。
首先須要說明的是,這個方法並無寫入標準,可是大多數主流瀏覽器已經支持或部分支持其功能了,因此能夠放心使用,固然若是有朝一日標準出來了,那就按標準來吧。
將指定元素定位到瀏覽器頂部,底部,中間
element.scrollIntoView(); // 等同於element.scrollIntoView(true)
element.scrollIntoView(alignToTop); // Boolean型參數
element.scrollIntoView(scrollIntoViewOptions); // Object型參數
scrollIntoViewOptions參數 可選
若是爲true,元素的頂端將和其所在滾動區的可視區域的頂端對齊。相應的 scrollIntoViewOptions: {block: "start", inline: "nearest"}。這是這個參數的默認值。
若是爲false,元素的底端將和其所在滾動區的可視區域的底端對齊。相應的scrollIntoViewOptions: {block: "end", inline: "nearest"}。
三、 jquery animate實現錨點慢慢平滑滾動效果
參考: http://www.javashuo.com/article/p-zufxzdcq-mc.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>js平滑滾動到頂部、底部、指定地方</title> <script type="text/javascript" src="http://cdn.staticfile.org/jquery/2.1.1-rc2/jquery.min.js"></script> <style> .box{ height:200px; width:100%; background:#ccc; margin:10px 0;} .location{ position:fixed; right:0; bottom:10px; width:20px; background:#FFC; padding:5px; cursor:pointer;color:#003}; </style> </head> <body> <div class="box"></div> <div class="box"></div> <div class="box"></div> <div class="box"></div> <div class="box a">產品介紹產品介紹產品介紹產品介紹產品介紹產品介紹產品介紹產品介紹產品介紹產品介紹產品介紹產品介紹產品介紹</div> <div class="box"></div> <div class="box"></div> <div class="box"></div> <div class="box"></div> <div class="box bottom"></div> <div class="location"> <p class="scroll_top">返回頂部</p> <p class="scroll_a">產品介紹</p> <p class="scroll_bottom">滑到底部</p> </div> <script type="text/javascript"> jQuery(document).ready( function($){ $('.scroll_top').click( function(){ $('html,body').animate({scrollTop: '0px'}, 800); }); $('.scroll_a').click(function(){$('html,body').animate({scrollTop:$('.a').offset().top}, 800); }); $('.scroll_bottom').click(function(){$('html,body').animate({scrollTop:$('.bottom').offset().top}, 800);}); }); </script> </body> </html>
四、 瀏覽器兼容性問題
若寫成:
$("body ").animate({
scrollTop: $('#id-hotel-policy').offset().top - intMinusTopBig
}, 8, function () {
// Animation complete.
});
則在高版本的chrome瀏覽器【67版】和firefox瀏覽器中都不可用。須要改成
$("body,html").animate({
scrollTop: $('#id-hotel-policy').offset().top - intMinusTopBig
}, 8, function () {
// Animation complete.
});
參考:關於頁面滾動值scrollTop在FireFox與Chrome瀏覽器間的兼容問題
發送到
HTML:
<div> <select id="selectID"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> </select> </div>
JS:
$(function () { $('#selectID').trigger('change'); //移入時 觸發select的change事件,即下面的事件 //綁定下拉框change事件,當下來框改變時調用 SelectChange()方法 $("#selectID").change(function () { SelectChange(); }); }); function SelectChange() { //獲取下拉框選中項的text屬性值 var selectText = $("#selectID").find("option:selected").text(); alert(selectText); //獲取下拉框選中項的value屬性值 var selectValue = $("#selectID").val(); alert(selectValue); //獲取下拉框選中項的index屬性值 var selectIndex = $("#selectID").get(0).selectedIndex; alert(selectIndex); ////獲取下拉框最大的index屬性值 var selectMaxIndex = $("#selectID option:last").attr("index"); alert(selectMaxIndex); }
思路:
1.先獲取圖片的id
2.定義一個存放多個圖片的數組,並給它一個初始編號 num=0;
3.當點擊圖片時,先讓num自增,而後判斷num的值是否和數組的長度相等,若是相等,就讓num回到0;
4.最後就把arr[num]賦給oImg的src屬性,就能讀取到圖片的路徑了。
//初始化的時候加載參數 var oImg = $('.left-part').children('img'); var arr = ['https://dimg04.c-ctrip.com/images/fd/hotel/g4/M09/4B/1C/CggYHlX364OAB964AADVhVE_jjU887_C_800_525_Q70.jpg', 'https://dimg04.c-ctrip.com/images/2002070000002qls70D99_C_800_525_Q70.jpg', 'https://dimg04.c-ctrip.com/images/200g0i00000099f6p39DB_C_800_525_Q70.jpg']; var num = 3; var index = 0; $('#picIndex').text(index+1); $('#picNum').text(num); oImg.attr('src', arr[index]); $('.next-btn').click(function () { if (index >= arr.length-1) { return false; } index++; $('#picIndex').text(index+1); oImg.attr('src', arr[index]); }); $('.pre-btn').click(function () { if (index <= 0) { return false; } index--; $('#picIndex').text(index + 1); oImg.attr('src', arr[index]); });
if ($(」#div」).attr("class").indexOf("glyphicon-circle-arrow-up") > -1) {
}
一、my97日期控件
日期控件使用
<div class="el-input el-input--small"> <span style="width:45%;display:inline-block;"> @Html.TextBoxFor(m => m.Request.ArrivalDateStart, new { style = "width:90px", onfocus = "WdatePicker({skin:'wingon',doubleCalendar:true,dateFmt:'yyyy-MM-dd',minDate:'%y/%M/%d',onpicked:function(){Request_ArrivalDateEnd.focus();}})" }) </span> —<span style="width:45%;display:inline-block;"> @Html.TextBoxFor(m => m.Request.ArrivalDateEnd, new { style = "width:90px", onfocus = "WdatePicker({doubleCalendar:true,dateFmt:'yyyy-MM-dd',minDate:'#F{$dp.$D(\\'Request_ArrivalDateStart\\',{d:0})}',skin:'wingon'})" })</span> </div>
注:引入js <script type="text/javascript" src="@Url.Content("~/Scripts/FRMy97DatePicker/WdatePicker.js")"></script>
開始時間的 onpicked 可要可不要
Request_ArrivalDateStart 是開始時間控件的id,