var str=' hello hi '; var new_str=$.trim(str); console.log(str.length) // 12 console.log(new_str.length) // 8
var username=$.trim($('#username').val());
var fruits=['apple','banner','orange','pear']; var mine='orange'; var res=$.inArray(mine,fruits); if(res==-1){ // 不存在 console.log('sorry,沒有你喜歡的!') }else{ console.log('有你的!') }
var str='hello hi see'; var searchvalue=str.indexOf('a'); if(searchvalue==-1){ console.log('該字符串不存在!') // 該字符串不存在 }else{ console.log(searchvalue) }
(1) JSON是一種數據格式,JS原生支持JSON格式,經過jQuery.getJSON()從服務器得到的JSON數據,jQuery會先嚐試將其轉爲對應的JS對象。 (2) 若是請求的URL中包括"callback=?"等相似的部分,jQuery會自動將其視做JSONP,並執行對應的回調函數來獲取JSON數據。 (3) 服務器返回的JSON數據必須符合嚴格的JSON語法,例如:全部屬性名稱必須加雙引號,全部字符串值也必須加雙引號(而不是單引號)。 (4) 該函數是經過異步方式加載數據的。 (5) 該函數屬於全局jQuery 對象。
// 請求目標url 類型字符串 // 發送請求傳遞的數據 可選 // 請求成功執行的回調函數 jQuery.getJSON( url [, data ] [, success ] )
$.getJSON( "/action.php?m=list", { page: 2, size: 10 }, function(data, textStatus, jqXHR){ // 若是服務器返回的JSON格式的數據是 [ {"id":11, "title":"文章11"}, {"id":12, "title":"文章12"}, {"id":13, "title":"文章13"} ] // jQuery將獲取的JSON格式數據轉換爲JS數組 for(var i in data){ var obj = data[i]; alert( obj.title ); } } );
事件委託: 通俗地來說,就是把一個元素響應事件(click、keydown......)的函數委託到另外一個元素; 舉個例子: 好比一個宿舍的同窗同時快遞到了,一種方法就是他們都一個個去領取,還有一種方法就是把這件事情委託給宿舍長,讓一我的出去拿回來全部快遞,而後再根據收件人一一分發給每一個宿舍同窗; 在這裏,取快遞就是一個事件,每一個同窗指的是須要響應事件的 DOM 元素,而出去統一領取快遞的宿舍長就是代理的元素,因此真正綁定事件的是這個元素,按照收件人分發快遞的過程就是在事件執行中,須要判斷當前響應的事件應該匹配到被代理元素中的哪個或者哪幾個。
.on(events, callback) 只能綁定頁面已有元素的事件。 .on(events, selector, callback) 則是在 已有的元素 上綁定 代理的 事件處理器 (addEventListener 實際上在該已有元素上調用),但只有事件的實際 source 是其子代元素而且符合 selector 時, callback 纔會以該實際 source 爲 this 指向的對象被調用。
$(selector).click(function (){}) $(selector).on('click ,function (){})
通常來講,dom須要有事件處理程序,咱們都會直接給它設事件處理程序就行了,那若是是不少的dom須要添加事件處理呢?好比咱們有100個li,每一個li都有相同的click點擊事件,可能咱們會用for循環的方法,來遍歷全部的li,而後給它們添加事件,那這麼作會存在什麼影響呢?javascript
在JavaScript中,添加到頁面上的事件處理程序數量將直接關係到頁面的總體運行性能,由於須要不斷的與dom節點進行交互,訪問dom的次數越多,引發瀏覽器重繪與重排的次數也就越多,就會延長整個頁面的交互就緒時間,這就是爲何性能優化的主要思想之一就是減小DOM操做的緣由;php
若是要用事件委託,就會將全部的操做放到js程序裏面,與dom的操做就只須要交互一次,這樣就能大大的減小與dom的交互次數,提升性能;css
事件委託是利用事件的冒泡原理來實現的。java
何爲事件冒泡呢?jquery
就是事件從最深的節點開始,而後逐步向上傳播事。ajax
繼續看:json
頁面上有這麼一個節點樹,div>ul>li>a;好比給最裏面的a加一個click點擊事件,那麼這個事件就會一層一層的往外執行,執行順序a>li>ul>div,有這樣一個機制,那麼咱們給最外面的div加點擊事件,那麼裏面的ul,li,a作點擊事件的時候,都會冒泡到最外層的div上,因此都會觸發,這就是事件委託,委託它們父級代爲執行事件。數組
<ul id="list"> <li>item 1</li> <li>item 2</li> <li>item 3</li> ...... <li>item n</li> </ul> // ...... 表明中間還有未知數個 li
$('ul').on('click','li',function(){ ... })
在實際項目,咱們常常須要經過 AJAX 或者用戶操做動態的增長或者去除列表項元素,那麼在每一次改變的時候都須要從新給新增的元素綁定事件,給即將刪去的元素解綁事件;瀏覽器
若是用了事件委託就沒有這種麻煩了,由於事件是綁定在父層的,和目標元素的增減是沒有關係的,執行到目標元素是在真正響應執行事件函數的過程當中去匹配的;性能優化
因此使用事件在動態綁定事件的狀況下是能夠減小不少重複工做的。
//操做Partner帳號列表 //增: $(document).on("click",'.add_to_list',function(){ ... }); //刪: $(document).on("click",'.del_to_list',function(){ ... })
<div class="box"> <div class="content"> <h3>我是content</h3> <form action="####" id="formtosub"> 姓名:<input type="text" name="" id="" value="" /><br /> 年齡:<input type="text" name="" id="" value="" /><br /> <button id="btn"> 提交</button> </form> </div> </div>
$(function(){ $("#btn").click(function(){ $(this).closest('#formtosub').css("background","red"); var form=$(this).closest('#formtosub'); console.log(form); }) })
var object= { url:url, //form提交數據的地址 type:type, //form提交的方式(method:post/get) target:target, //服務器返回的響應數據顯示的元素(Id)號 beforeSerialize:function(){} //序列化提交數據以前的回調函數 beforeSubmit:function(){}, //提交前執行的回調函數 success:function(){}, //提交成功後執行的回調函數 error:function(){}, //提交失敗執行的函數 dataType:null, //服務器返回數據類型 clearForm:true, //提交成功後是否清空表單中的字段值 restForm:true, //提交成功後是否重置表單中的字段值,即恢復到頁面加載時的狀態 timeout:6000 //設置請求時間,超過該時間後,自動退出請求,單位(毫秒)。 }
$(function(){ $("form").ajaxForm(object); })
$(function(){ $('#submitbtn').click(function(){ $("form").ajaxSubmit(object); }) })
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script> <script type="text/javascript" src="jquery-list-dragsort.js"></script>
<style type="text/css"> /* dragsort */ *{margin:0;padding:0;} ul,li{display: block;list-style: none;} .dragsort-box li{ width:50%; height:30px; line-height:30px; margin:5px auto; padding:0 5px; border:1px solid #DDD; border-radius: 10px; } </style>
<body> <section class="wrap" style="width:80%; padding:5% 10% 5%;"> <h1>jQuery列表拖動排列</h1> <ul class="dragsort-box"> <li data-cursor="pointer" >蔬菜</li> <li data-cursor="pointer" >肉</li> <li data-cursor="pointer" >麪包</li> <li data-cursor="pointer" >牛奶</li> <li data-cursor="pointer" >奶油</li> <li data-cursor="pointer" >冰淇淋</li> </ul> </section> <script type="text/javascript"> $(".dragsort-box").dragsort({ dragSelector:"li", // 拖拽元素 dragEnd:function (){ // 拖動結束後的回調函數 console.log(1) }}); // $(".dragsort-box").dragsort("destroy"); // 中止拖拽 </script> </body>
dragSelector
CSS選擇器內的元素的列表項的拖動手柄。默認值是「li」。
dragSelectorExclude
CSS選擇器的元素內的dragSelector不會觸發dragsort的。默認值是」input, textarea, a[href]」。
dragEnd
拖動結束後將被調用的回調函數.
dragBetween
設置爲「true」,若是你要啓用多組列表之間拖動選定的列表。 默認值是false。
placeHolderTemplate
拖動列表的HTML部分。默認值是 li 標籤。
scrollContainer
CSS選擇器的元素,做爲滾動容器,例如溢出的div設置爲自動。默認值是「窗口「
scrollSpeed
一個數字,它表明了速度,頁面拖動某一項時,將滾動容器外,較高使用價值的是速度和較低的值是較慢的。 若是設置爲」0″以禁用滾動。默認值是」5″.