jQuery中的一些小技巧

JQ使用過(guò)程中,一些小技巧:

創(chuàng)新互聯(lián)自2013年創(chuàng)立以來(lái),先為昭陽(yáng)等服務(wù)建站,昭陽(yáng)等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為昭陽(yáng)企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

1.is()方法

根據(jù)選擇器、元素或 jQuery 對(duì)象來(lái)檢測(cè)匹配元素集合,如果這些元素中至少有一個(gè)元素匹配給定的參數(shù),則返回 true。一些小應(yīng)用如下:

<ul>
 <li>list <strong>item 1</strong></li>
 <li><span>list item 2</span></li>
 <li>list item 3</li>
</ul>
$("ul").click(function(event) {
 var $target = $(event.target);
 if ( $target.is("li") ) {
  $target.css("background-color", "red");
 }
});

如此,便可以限制住,只有列表項(xiàng)li本身點(diǎn)擊之后,才會(huì)觸發(fā)寫(xiě)入的點(diǎn)擊事件.

其也可以做以下一些判斷:

// 是不是一個(gè)div
elem.is('div') && console.log("it's a div");
// 是不是有包含(也可以有其他類(lèi)名)bigbox的類(lèi)名的元素?
elem.is('.bigbox') && console.log("it has the bigbox class!");
// 是不是隱藏的?
elem.is(':not(:visible)') && console.log("it is hidden!");

這里有一點(diǎn)需要注意,&&運(yùn)算符可以用來(lái)做一個(gè)判斷,當(dāng)前面的條件滿足時(shí),后面的會(huì)執(zhí)行,但是后面的條件不能是表達(dá)式,只能是console.log()或則++i一類(lèi)的.

還有以下比較有用的用法:

elem.animate({'width':200},1000);
// 是否正在動(dòng)畫(huà)
elem.is(':animated') && console.log("it is animated!");

2.jquery中拓展方法

$.fn是指jquery的命名空間,加上fn上的方法及屬性,會(huì)對(duì)jquery實(shí)例每一個(gè)有效。

如擴(kuò)展$.fn.abc(),即$.fn.abc()是對(duì)jquery擴(kuò)展了一個(gè)abc方法,那么后面你的每一個(gè)jquery實(shí)例都可以引用這個(gè)方法了.

那么你可以這樣子:$("#div").abc();

jQuery.extend(object);為擴(kuò)展jQuery類(lèi)本身.為類(lèi)添加新的方法。

jQuery.fn.extend(object);給jQuery對(duì)象添加方法。

jQuery.extend(object); 為jQuery類(lèi)添加添加類(lèi)方法,可以理解為添加靜態(tài)方法。如:

elem.animate({'width':200},1000);
// 是否正在動(dòng)畫(huà)
elem.is(':animated') && console.log("it is animated!");

便為 jQuery 添加一個(gè)為add 的 “靜態(tài)方法”,之后便可以在引入 jQuery 的地方,使用這個(gè)方法了,

$.add(3,4); //return 7

jQuery.fn.exists = function(){ return this.length > 0; }
console.log($('#elem').exists() ? "exists!" : "doesn't exist!");

3.jQuery方法$()實(shí)際上是擁有兩個(gè)參數(shù)的

$('li','#firstList').each(function(){
  console.log($(this).html());
});

這里,第二個(gè)參數(shù)用來(lái)限制第一個(gè)參數(shù)給定的查找結(jié)果

$('<div>',{
  "class": "bigBlue",
  "css": {
    "background-color":"purple"
  },
  "width" : 20,
  "height": 20,
  "animate" : {  // 可以設(shè)置div的動(dòng)畫(huà)效果
    "width": 200,
    "height":50
  }
}).appendTo('#result');

這里,第二個(gè)參數(shù)用來(lái)對(duì)創(chuàng)建的元素進(jìn)行設(shè)置.

4.jquery中的end()方法,可以讓鏈?zhǔn)秸Z(yǔ)法寫(xiě)起來(lái)更加高效,快捷.

<ul id="meals"> <li> <ul class="breakfast"> <li class="eggs">No</li> <li class="toast">No</li> <li class="juice">No</li> </ul> </li> </ul>
breakfast.find('.eggs').text('Yes').end() // back to breakfast
.find('.toast').text('Yes').end().find('.juice').toggleClass('juice coffee').text('Yes');

這里,end()會(huì)返回查找元素的上一級(jí).

5.contextmenu事件  右鍵點(diǎn)擊

也許希望web 應(yīng)用感覺(jué)更像原生的,那么可以阻止contextmenu默認(rèn)事件。

$(function(){
  $(document).on("contextmenu",function(e){
    e.preventDefault();
  });
}); 

當(dāng)然,應(yīng)用此事件,也可以自定義,右鍵出來(lái)的操作菜單,類(lèi)似于

jQuery中的一些小技巧

6.有時(shí)候不希望網(wǎng)頁(yè)的某一部分內(nèi)容被選擇比如復(fù)制粘貼這種事情,我們可以這么做:

$('p.descr').attr('unselectable', 'on').css('user-select', 'none').on('selectstart', false);

這樣,內(nèi)容就不能再被選擇了.

7.最小的DOM操作

用js操作DOM是非常浪費(fèi)資源的,下面的方法一般是我們通常的做法:

var elem = $('#elem');
for(var i = 0; i < 100; i++){
  elem.append('<li>element '+i+'</li>');
}

這樣做,重復(fù)的向元素中添加,無(wú)疑是一種極大的資源浪費(fèi),而通過(guò)下面的方法,則可以減少大量的DOM操作

var elem = $('#elem'),
arr = [];
for(var i = 0; i < 100; i++){
  arr.push('<li>element '+i+'</li>');
}
elem.append(arr.join(''));

8.更方便的分解URL

我們一般可以使用正則表達(dá)式來(lái)分解URL,但是這并不是一個(gè)好方法,我們可以借助a標(biāo)簽來(lái)完成URL的分解

var url = 'http://tutorialzine.com/books/jquery-trickshots?trick=12&&abc=123#comments';
  var a = $('<a>',{ href: url });
  console.log(url); 
  console.log('Host name: ' + a.prop('hostname')); //Host name: tutorialzine.com
  console.log('Path: ' + a.prop('pathname')); //Path: /books/jquery-trickshots
  console.log('Query: ' + a.prop('search')); //Query: ?trick=12&&abc=123
  console.log('Protocol: ' + a.prop('protocol')); //Protocol: http:
  console.log('Hash: ' + a.prop('hash')); //Hash: #comments

這樣我們就可以很快速的完成URL的分解

9.有時(shí)候,緩存selector,反而可以?xún)?yōu)化你的js

下面有三種情況,第一種情況是一部分人的通常做法,這種寫(xiě)法費(fèi)力而且不討好,后面兩種方案則是對(duì)第一種的優(yōu)化,可以二選一.

第一種:

$('#pancakes li').eq(0).remove();
$('#pancakes li').eq(1).remove();
$('#pancakes li').eq(2).remove();

第二種和第三種,可以二選一:

//第二種
var pancakes = $('#pancakes li');
pancakes.eq(0).remove();
pancakes.eq(1).remove();
pancakes.eq(2).remove();
//第三種
pancakes.eq(0).remove().end().eq(1).remove().end().eq(2).remove().end();

10.on()方法

on() 方法在被選元素及子元素上添加一個(gè)或多個(gè)事件處理程序。

自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。該方法給 API 帶來(lái)很多便利,推薦使用該方法,它簡(jiǎn)化了 jQuery 代碼庫(kù)。

注意:使用 on() 方法添加的事件處理程序適用于當(dāng)前及未來(lái)的元素(比如由腳本創(chuàng)建的新元素)。

提示:如需移除事件處理程序,請(qǐng)使用 off() 方法。

提示:如需添加只運(yùn)行一次的事件然后移除,請(qǐng)使用 one 方法。

$(selector).on(event,childSelector,data,function,map)

jQuery中的一些小技巧

11.模擬觸發(fā)事件

我們可以通過(guò)trigger模擬觸發(fā)一個(gè)click事件

var press = $('#press');
press.on('click',function(e, how){
  how = how || '';
  alert('The buton was clicked ' + how + '!');
});
press.trigger('click');
press.trigger('click',['fast']);

同時(shí),我們亦可以,使用on()方法創(chuàng)建自己喜歡的事件名稱(chēng),然后通過(guò)trigger來(lái)觸發(fā)。舉例如下:

<button id="button1">Jump</button> <button id="button2">Punch</button> <button id="button3">Click</button> <button id="clear" >Clear</button> <div id="eventDiv"></div>
var button1 = $('#button1'),
  button2 = $('#button2'),
  button3 = $('#button3'),
  clear = $('#clear'),
  div = $('#eventDiv');
div.on({
  jump : function(){
    alert('Jumped!');
  },
  punch : function(e,data){
    alert('Punched '+data+'!');
  },
  click : function(){
    alert('Simulated click!');
  }
});
button1.click(function(){
  div.trigger('jump');
});
button2.click(function(){
  // Pass data along with the event
  div.trigger('punch',['hard']);
});
button3.click(function(){
  div.trigger('click');
});
clear.click(function(){
  //some clear code
});

12.觸摸事件

// Define some variables
var ball = $('<div id="ball"></div>').appendTo('body'),
startPosition = {}, elementPosition = {};
// Listen for mouse and touch events
ball.on('mousedown touchstart',function(e){
  e.preventDefault();
  // Normalizing the touch event object
  e = (e.originalEvent.touches) ? e.originalEvent.touches[0] : e;
  // Recording current positions
  startPosition = {x: e.pageX, y: e.pageY};
  elementPosition = {x: ball.offset().left, y: ball.offset().top};
  // These event listeners will be removed later
  ball.on('mousemove.rem touchmove.rem',function(e){
    e = (e.originalEvent.touches) ? e.originalEvent.touches[0] : e;
    ball.css({
      top:elementPosition.y + (e.pageY - startPosition.y),
      left: elementPosition.x + (e.pageX - startPosition.x),
    });
  });
});
ball.on('mouseup touchend',function(){
  // Removing the heavy *move listeners
  ball.off('.rem');
});

13.更快的阻止默認(rèn)事件

通常,我們用event.preventDefalut()來(lái)阻止默認(rèn)事件,但是jquery為此提供了更簡(jiǎn)便的方法:

<a  id="goToGoogle">Go To Google</a>
$('#goToGoogle').click(false);

14.使用event.result鏈接多個(gè)事件處理程序。

對(duì)一個(gè)元素綁定多個(gè)事件處理程序并不常見(jiàn),而使用event.result更可以將多個(gè)事件處理程序聯(lián)系起來(lái)。看下面的例子。

var press = $('#press');
press.on('click',function(){
  return 'Hip';
});
press.on('click',function(e){
  console.log(e.result + ' Hop!');
})
//控制臺(tái)輸出: HipHop!

15.平行的運(yùn)行多個(gè)Ajax請(qǐng)求

當(dāng)我們需要發(fā)送多個(gè)Ajax請(qǐng)求是,相反于等待一個(gè)發(fā)送結(jié)束再發(fā)送下一個(gè),我們可以平行地發(fā)送來(lái)加速Ajax請(qǐng)求發(fā)送。

$.when($.get('assets/misc/1.json'), $.get('assets/misc/2.json')).then(function(r1, r2){
  console.log(r1[0].message + " " + r2[0].message);
})

16.通過(guò)jQuery獲得ip

我們不僅可以在電腦上ping到一個(gè)網(wǎng)站的ip,也可以通過(guò)jQuery得到

$.get('https://jsonip.com/', function(res){ console.log(res.ip); });

17.使用最簡(jiǎn)單的ajax請(qǐng)求

jQuery(使用ajax)提供了一個(gè)速記的方法來(lái)快速下載內(nèi)容并添加在一個(gè)元素中。

<p class="content"></p> <p class="content"></p>

var contentDivs = $('.content');
contentDivs.eq(0).load('1.txt');
contentDivs.eq(1).load('1.html #header');

18.通過(guò)IP地址獲得地理位置

有很多在線服務(wù)可以告訴我們IP地址所在的城市和國(guó)家,下面我們先ping到百度的IP地址,然后獲取其地理位置:

var ip = '119.75.218.70',
  api = 'http://freegeoip.net/json/' + ip + '?callback=?';
$.getJSON(api, function(r){
  console.log('How is the weather in ' + r.city + ', ' + r.country_name + '?');
});

19.使用匿名函數(shù)來(lái)產(chǎn)生一個(gè)獨(dú)立的代碼塊

定義全局變量和函數(shù)是一種代碼很粗糙的行為,更好的方式是通過(guò)使用匿名函數(shù)使你的代碼獨(dú)立于塊之中??聪旅娴睦樱?/p>

(function($){
  var c = 1;
  $.fn.count = function(){
    log(c++);
    return this;
  }; 
})(jQuery);
$(document).count();
$('body').count().count();

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持創(chuàng)新互聯(lián)!

當(dāng)前題目:jQuery中的一些小技巧
當(dāng)前URL:http://muchs.cn/article28/pichcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)