zoukankan      html  css  js  c++  java
  • 工程师,请优化你的代码

    转自:http://suqing.iteye.com/blog/1751629

    1. Ajax
    2. jQuery ready事件
    3. 事件处理
    4. DOM操作

    1.Ajax
    大部分项目这么写:

    function getName(personid) {
        var dynamicData = {};
        dynamicData["id"] = personID;
        $.ajax({
            url : "getName.php",
            type : "get",
            data : dynamicData,
            success : function (data) {
                // Updates the UI based the ajax result
                $(".person-name").text(data.name);
            }
        });
    }

    getName("2342342");

    最佳实践:

    function getName(personid) {
        var dynamicData = {};
        dynamicData["id"] = personid;
        return $.ajax({
            url : "getName.php",
            type : "get",
            data : dynamicData
        });
    }
    
    getName("2342342").done(function (data) {
        // Updates the UI based the ajax result
        $(".person-name").text(data.name);
    });

    非常灵活

    2.jQuery ready事件

    大部分项目用这段代码做闭包

    $("document").ready(function () {
        // The DOM is ready!
        // The rest of the code goes here
    });
    或者用简写
    $(function () {
        // The DOM is ready!
        // The rest of the code goes here
    });

    如果你清楚代码的执行环境 

    如果你不关注页面加载性能
    如果你不关注最佳实践
    。。。这么写就没问题

    更好的写法是:

    // IIFE - Immediately Invoked Function Expression
    (function ($, window, document) {
        
        // The $ is now locally scoped
        
        // Listen for the jQuery ready event on the document
        $(function () {
            // The DOM is ready!
        });
        
     // The rest of the code goes here!
    }(window.jQuery, window, document));
    // The global jQuery object is passed as a parameter

    更进一步,最佳写法:

    // IIFE - Immediately Invoked Function Expression
    (function (yourcode) {
    
        // The global jQuery object is passed as a parameter
        yourcode(window.jQuery, window, document);
    
    }(function ($, window, document) {
    
        // The $ is now locally scoped
    
        // Listen for the jQuery ready event on the document
        $(function () {
            // The DOM is ready!
        });
    });

    3.事件处理

    大部分项目这么写:

    $("#longlist li").on("mouseenter", function () {
        $(this).text("Click me!");
    });
    $("#longlist li").on("click", function () {
        $(this).text("Why did you click me?!");
    });

    更好的写法:

    var listItems = $("#longlist li");
    listItems.on({
        "mouseenter" : function () {
            $(this).text("Click me!");
        },
        "click" : function () {
            $(this).text("Why did you click me?!");
        }
    });
    DRY(Don 't repeat yourself.)

    最佳实践:

    var list = $("#longlist");
    list.on("mouseenter", "li", function () {
        $(this).text("Click me!");
    });
    list.on("click", "li", function () {
        $(this).text("Why did you click me?!");
    });
    使用事件代理(Event Delegation)

    4.DOM操作
    大部分项目这么写:

    $('.class1').click(function () {
        some_function();
    });
    $('.class2').click(function () {
        some_function();
    });

    如果你喜欢重复的编码

    如果你不关心代码性能

    如果你不关注最佳实践

    更好的实现方法:

    $('.class1').$('.class2').click(function () {
        some_function();
    });

    大部分项目这么写:

    // Set's an element's title attribute using it's current text
    $(".container input#elem").attr("title", $(".container input#elem").text());
    
    // Set 's an element' s text color to red
    $(".container input#elem").css("color", "red");
    
    // Makes the element fade out
    $(".container input#elem").fadeOut();

    如果你喜欢重复的编码
    如果你不关心代码性能
    如果你不关注最佳实践
    。。。这么写没问题

    更好的实现方法:

    // Set's an element's title attribute using it's current text
    $("#elem").attr("title", $("#elem").text());
    
    // Set's an element's text color to red
    $("#elem").css("color", "red");
    
    // Makes the element fade out
    $("#elem").fadeOut();

    简化你的选择器

    最佳实践:

    // Stores the live DOM element inside of a variable
    var elem = $("#elem");
    
    // Set's an element's title attribute using it's current text
    elem.attr("title", elem.text());
    
    // Set's an element's text color to red
    elem.css("color", "red");
    
    // Makes the element fade out
    elem.fadeOut();

    使用变量缓存你的选择器

    或者是用更简单的写法:

    // Stores the live DOM element inside of a variable
    var elem = $("#elem");
    // Chaining
    elem.attr("title", elem.text()).css("color", "red").fadeOut();

    使用链式调用

    5.另外一个操作DOM的示例
    大部分项目这么写:

    // Dynamically building an unordered list from an array
    var localArr = ["Greg", "Peter", "Kyle", "Danny", "Mark"],
    list = $("ul.people");
    
    $.each(localArr, function (index, value) {
        list.append("<li id=" + index + ">" + value + "</li>");
    });

    最佳实践:只append一次:

    // Dynamically building an unordered list from an array
    var localArr = ["Greg", "Peter", "Kyle", "Danny", "Mark"],
    list = $("ul.people"),
    dynamicItems = "";
    
    $.each(localArr, function (index, value) {
        dynamicItems += "<li id=" + index + ">" + value + "</li>";
    });
    list.append(dynamicItems);

    参考资料:
    http://gregfranko.com/jquery-best-practices/
    http://stackoverflow.com/questions/18307078/jquery-best-practises-in-case-of-document-ready
    http://gregfranko.com/jquery-best-practices/#/29

  • 相关阅读:
    Conversions
    Mispelling4
    A hard puzzle
    Easier Done Than Said?
    利用map可以对很大的数出现的次数进行记数
    A+B Coming
    结构体成员变量
    NSString 类介绍及用法
    复习回顾
    函数与方法对比
  • 原文地址:https://www.cnblogs.com/tv151579/p/4611110.html
Copyright © 2011-2022 走看看