鋒利的jQuery第2版學習筆記8~11章

来源:http://www.cnblogs.com/TwinklingZ/archive/2016/04/04/5353294.html
-Advertisement-
Play Games

第8章,用jQuery打造個性網站 網站結構 文件結構 images文件夾用於存放將要用到的圖片 styles文件夾用於存放CSS樣式表,個人更傾向於使用CSS文件夾 scripts文件夾用於存放jQuery腳本,個人更傾向於使用JS文件夾存放所有的js及jQuery腳本 編寫CSS樣式 推薦首先編 ...


第8章,用jQuery打造個性網站

網站結構

文件結構

images文件夾用於存放將要用到的圖片 styles文件夾用於存放CSS樣式表,個人更傾向於使用CSS文件夾 scripts文件夾用於存放jQuery腳本,個人更傾向於使用JS文件夾存放所有的js及jQuery腳本

編寫CSS樣式

推薦首先編寫全局樣式,接著編寫可大範圍內重用的樣式,最後編寫細節樣式,這樣根據CSS最近優先原則,可以較容易地對網站進行從整體到細節樣式的定義

第9章,jQuery Mobile

jQuery Mobile主要特性

1、基於jQuery構建 2、相容絕大部分手機平臺 3、輕量級的庫 4、模塊化結構 5、HTML5標記驅動的配置 6、漸進增強原則 7、響應設計 8、強大的Ajax導航系統 9、易用性 10、支持觸摸和滑鼠事件 11、統一的UI組件 12、強大的主題化框架

其他框架

1、jqMobi(http://jqmobi.com) 2、Sencha Touch(http://sencha.com) 3、Zepto.js(http://zeptojs.com/

第10章,jQuery各個版本的變化

講解jQuery的發展史,瞭解瞭解

第11章,jQuery性能優化和技巧

jQuery性能優化

1、使用最新版的jQuery類庫 2、使用合適的選擇器(1、儘量使用id選擇器,2、儘量給選擇器指定上下文) 3、緩存對象(即使用一個變數將需要重覆使用的jQuery對象存下來,以避免多次獲取) 4、迴圈時的DOM操作(減少DOM操作) 5、數組方式使用jQuery對象(儘量使用for或while迴圈來處理jQuery對象,而不是使用$.each()) 註:檢查jQuery對象是否存在的方式應該使用length屬性 6、事件代理 7、將代碼轉化為jQuery插件 8、使用join()來拼接字元串,替代使用“+”來拼接 9、合理利用HTML5的Data屬性 10、儘量使用原生的JavaScript方法 11、壓縮JavaScript

jQuery技巧

1、禁用右鍵
$(document).ready(function() {
    $(document).bind("contextmenu",function(e) {
        return false;
    });
});

2、新視窗打開頁面

$(document).ready(function() {
    // ex 1 : href = "http://" 的超鏈接將會在新視窗打開鏈接
    $('a[href^="http://"]').attr('target',"_blank");

    // ex 2 : rel = "external" 的超鏈接將會在新視窗打開鏈接
    $('a[rel$="external"]').click(function() {
        this.target = "_blank";
    });
});
使用:
<a href="http://www.cssrain.cn" rel="external">open link </a>

3、判斷瀏覽器類型

$(document).ready(function() {
    // Firefox2 and above
    if($.browser.mozilla && $.browser.version >= "1.8"){
        // do something
    }
    // Safari
    if($.browser.safari){
        // do something
    }

    // Chrome
    if($.browser.chrome){
        // do something
    }

    // Opera
    if($.browser.opera){
        // do something
    }

    // IE6 and below
    if($.browser.msie && $.browser.version <= 6){
        // do something
    }

    //anything above IE 6
    if($.browser.msie && $.browser.version > 6){
        // do something
    }
});

4、輸入框文字獲取和失去焦點

$(document).ready(function() {
    $("input.text1").val("Enter your search text here");
    textFill($('input.text1'));
});
function textFill(input){ // input focus text function
    var originalvalue = input.val();
    input.focus(function() {
        if($.trim(input.val()) == originalvalue){
            input.val('');
        }
    }).blur(function() {
        if($.trim(input.val()) == ""){
            input.val(originalvalue);
        }
    });
}

5、返回頭部滑動動畫

jQuery.fn.scrollTo = function(speed) {
    var targetOffset = $(this).offset().top;
    $('html.body').stop().animate({scrollTop : targetOffset},speed);
    return this;
};
// use
$("#goheader").click(function() {
    $("body").scrollTo(500);
    return false;
});

 6、獲取滑鼠位置

$(document).ready(function() {
    $(document).mousemove(funtion(e) {
        $("#XY").html("X : " + e.pageX + " | Y : " + e.pageY);
    });
});

7、判斷元素是否存在

$(document).ready(function() {
    if($('#id').length){
        // do something
    }
});

 8、點擊div也可跳轉

$('div').click(function() {
    window.location = $(this).find("a").attr("href");
    return false;
});

9、根據瀏覽器大小添加不同樣式

$(document).ready(function() {
    function checkWindowSize() {
        if($(window).width() > 1200){
            $('body').addClass('large');
        }else{
            $('body').removeClass('large');
        }
    }
    $(window).resize(checkWindowSize);
});

 10、設置div在屏幕中央

$(document).ready(function() {
    jQuery.fn.center = function() {
        this.css("position","absolute");
        this.css("top",($(window).height() - this.height()) / 2 + $(window).scrollTop() + "px");
        this.css("left",($(window).width() - this.width()) / 2 + $(window).scrollLeft() + "px");
        return this;
    }

    // use
    $("#XY").center();
});

11、創建自己的選擇器

$(document).ready(function() {
    $.extend($.expr[':'],{
        moreThen500px : function(a) {
            return $(a).width() > 500;
        }
    });
    $('.box:moreThen500px').click(function() {
        // ...
    });
});

 12、關閉所有動畫效果

$(document).ready(function() {
    jQuery.fx.off = true;
});

13、檢測滑鼠右鍵和左鍵

$(document).ready(function() {
    $('#XY').mousedown(function(e) {
        alert(e.which); // 1 = 滑鼠左鍵,2 = 滑鼠中鍵,3 = 滑鼠右鍵
    });
});

 14、回車提交表單

$(document).ready(function() {
    $("input").keyup(function(e) {
        if(e.which == 13){
            alert("回車提交表單");
        }
    });
});

15、設置全局Ajax參數

$('#load').ajaxStart(function() {
    showLoading(); // 顯示loading
    disableButtons(); // 禁用按鈕
});
$('#load').ajaxComplete(function() {
    hideLoading(); // 隱藏loading
    enableButtons(); // 啟用按鈕
});

16、獲取選中的下拉框

$('#someElement').find('option:selected');
$('#someElement option:selected');

17、切換覆選框

var tog = false;
$('button').click(function() {
    $('input[type=checkbox]').attr('checked',!tog);
    tog = !tog;
});

18、使用siblings()選擇同輩元素

// 不這樣做
$('#nav li').click(function() {
    $('#nav li').removeClass('active');
    $(this).addClass('active');
});
// 替代做法
$('#nav li').click(function() {
    $(this).addClass('active')
            .siblings().removeClass('active');
});

19、個性化鏈接

$(document).ready(function() {
    $("a[href$='pdf']").addClass("pdf");
    $("a[href$='zip']").addClass("zip");
    $("a[href$='psd']").addClass("psd");
});

20、在一段時間之後自動隱藏或關閉元素

// 這是1.3.2中我們使用setTimeout來實現的方式
setTimeout(function() {
    $('div').fadeIn(400);
},3000);
// 而在1.4之後的版本可以使用delay()這一功能來實現的方式
$('div').slideUp(300).delay(3000).fadeIn(400);

 21、使用Firefox或Firebug來記錄事件日誌

// $('#someDiv').log('div')
jQuery.log = jQuery.fn.log = function(msg) {
    if(console){
        console.log("%s : %o",msg,this);
    }
    return this;
};

22、為任何與選擇器相匹配的元素綁定事件

// 為table裡面的td元素綁定click事件,不管td元素是一直存在還是動態創建的
// jQuery 1.4.2之前使用的方式
$('table').each(function() {
    $('td',this).live('click',function() {
        $(this).toggleClass("hover");
    });
});
// jQuery 1.4.2 使用方式
$('table').delegate('td','click',function() {
    $(this).toggleClass('hover');
});
// jQuery 1.7.1使用方式
$('table').on('click','td',function() {
    $(this).toggleClass('hover');
});

23、使用CSS鉤子

查看http://github.com/brandonaaron/jquery-cssHooks 24、$.proxy()的使用 使用回調方法的缺點之一就是當執行類庫中的方法之後,上下文對象被設置到另外一個元素,如:
<div id="panel" style="display:none">
    <button>Colse</button>
</div>

執行下列代碼

$('#panel').fadeIn(function() {
    $('#panel button').click(function() {
        $(this).fadeOut();
    });
});

 buton元素會消失,而不是panel元素消失,可以使用$.proxy()解決

$('#panel').fadeIn(function() {
    // Using $.proxy()
    $('#panel button').click($.proxy(function() {
        // this指向 #panel
        $(this).fadeOut();
    },this));
});

 25、限制Text-Area域中的字元個數

jQuery.fn.maxLength = function(max) {
    this.each(function() {
        var type = this.tagName.toLowerCase();
        var inputType = this.type ? this.type.toLowerCase() : null;
        if(type == "input" && inputType == "text" || inputType == "password"){
            // 應用標準的maxLength
            this.maxLength = max;
        }else if(type == "textarea"){
            this.onkeypress = function(e) {
                var ob = e || event;
                var keyCode = ob.keyCode;
                var hasSelection = document.selection ? document.selection.createRange().text.length > 0 : this.selectionStart != this.selectionEnd;
                return !(this.value.length >= max && (keyCode > 50 || keyCode == 32 || keyCode == 0 || keyCode == 13) &&
                    !ob.ctrlKey && !ob.altKey && !hasSelection);
            };
            this.onkeyup = function() {
                if(this.value.length > max){
                    this.value = this.value.substring(0,max);
                }
            };
        }
    });
};
// use
$('#mytextarea').maxLength(10);

26、本地存儲

localStorage.someData = "This is going to be saved";

 27、解析json數據時報parseError錯誤

 jQuery1.4之後,採用了更嚴格的json解析方式,所有內容必須要有雙引號 28、從元素中出去HTML
(function($) {
    $.fn.stripHtml = function() {
        var regexp = /<("[^"]*"|'[^']*'|[^'">])*>/gi;
        this.each(function() {
            $(this).html($(this).html().replace(regexp,''));
        });
        return $(this);
    }
})(jQuery);
// use
$('div').stripHtml();

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

-Advertisement-
Play Games
更多相關文章
  • 構造函數基礎 構造函數是一種特殊的函數,主要用來在創建對象時初始化對象,為對象成員變數設置初始值,在 OC 中的構造函數是 initWithXXX,在 Swift 中由於支持函數重載,所有的構造函數都是 init 構造函數的作用 分配空間 alloc 設置初始值 init 必選屬性 自定義 Pers ...
  • 問題場景 最近項目在發佈的時候出現了一個莫名其妙的錯誤:在websphere8.5上面可以部署但是不能正常訪問,但是在tomcat和websphere7.0上面卻可以正常部署訪問。所報錯誤如下: 剛開始以為是版本相容性的問題,於是到網上各種找答案,還是不能解決。後來順著filter這條線索發現,應該 ...
  • dict是字典dictionary的縮寫,他存放的是鍵值對key/value,用花括弧表示,格式為d={'micheal':99,'jack':88} 當我們訪問的時候直接print(d['micheal'])#輸出相應的99; 可以給dict複製並且會覆蓋掉原來的value,但是如果key沒有對應 ...
  • 隨著互聯網信息技術日新月異的發展,一個海量數據爆炸的時代已經到來。如何有效地處理、分析這些海量的數據資源,成為各大技術廠商爭在激烈的競爭中脫穎而出的一個利器。可以說,如果不能很好的快速處理分析這些海量的數據資源,將很快被市場無情地所淘汰。當然,處理分析這些海量數據目前可以借鑒的方案有很多:首先,在分 ...
  • 回顧: 上一節中鄙人通過解析表達式樹生成Sql碎片,其中我也把解析表達式類代碼貼了出來,文章發佈之後我對ExpressionAnalyzer類做了些改動,下麵我還會將代碼貼出來,廢話不多說,直接進入今天的主題。 實體類設計: 首先,我覺得要想直接通過實體類生成Sql語句,那麼你可能要知道這個實體類對 ...
  • 作者:禪樓望月( http://www.cnblogs.com/yaoyinglong ) JavaScript里也可以像Java等面向對象的語言世界里創建自定義的類型,但是由於JavaScript中不支持使用class關鍵字來創建自定義的類型,因此我們只能另闢蹊徑……下麵我們一起來看在JavaSc ...
  • 作用: 給用戶提供一個界面(前臺界面),讓用戶填寫相應的信息,對用戶提交的信息進行收集、分類、與用進行交互。 表單的工作流程: 1、用戶在具有表單的頁面填寫數據 2、將數據提交至後臺(.php) 例如uli.php 3、後臺(.php)接收數據後進行驗證,如果驗證通過,則寫入資料庫或從資料庫將數據讀... ...
  • 文件尾碼名 sass有兩種尾碼名文件:一種尾碼名為sass,不使用大括 號和分號;另一種就是我們這裡使用的scss文件,這種和我們 平時寫的css文件格式差不多,使用大括弧和分號。而本教程中 所說的所有sass文件都指尾碼名為scss的文件。在此也建議使 用尾碼名為scss的文件,以避免sass尾碼 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...