angularJS开发promise对象使用方法

创建一个服务对象:

.factory("UserSerice",function($q,$http,ajax){
    var _url = '/api/v1/user/';

    return {
        get:function(id,param){
            var defer = $q.defer();
            $http.get(ajax.parseParam(_url + id,param))
                .success(function(data){
                    defer.resolve(data);
                })
                .error(function(data){
                    defer.reject(data);
                })
            return defer.promise;
        },
        save:function(param){
            var defer = $q.defer();
            $http.post(_url,param)
                .success(function(data){
                    defer.resolve(data);
                })
                .error(function(data){
                    defer.reject(data);
                })
            return defer.promise;
        },
        put:function(id,param){
            var defer = $q.defer();
            $http.put(_url + id,param)
                .success(function(data){
                    defer.resolve(data);
                })
                .error(function(data){
                    defer.reject(data);
                })
            return defer.promise;
        }

    }
})

 

服务包含增改查,3种方法,下面是使用方法:

.controller("controllerMain", function ($scope,UserSerice) {
    var user_promise;
    $scope.get = function () {
        c($scope.user_id)
        user_promise = UserSerice.get($scope.user_id,{});
        user_promise.then(function(data){
            c("user_promise:succ")
            c(data);

        },function(data){
            c("user_promise:err")
            c(data);

        });


    }

    $scope.save = function () {
        user_promise = UserSerice.save({user_name:$scope.user_name,user_pwd:$scope.user_pwd,email:$scope.email});
        user_promise.then(function(data){
            c("save:user_promise:succ")
            c(data);
            if(data.response_code == 1){
                $scope.user_id = data.user_id;
            }

        },function(data){
            c("save:user_promise:err")
            c(data);

        });

    }

    $scope.put = function () {

        user_promise = UserSerice.put($scope.user_id,{user_name:$scope.user_name,user_pwd:$scope.user_pwd,email:$scope.email});
        user_promise.then(function(data){
            c("put:user_promise:succ")
            c(data);

        },function(data){
            c("put:user_promise:err")
            c(data);

        });

    }

})

 

angularJS创建拦截注入$httpProvider、interceptor 、auth

angularJS创建拦截注入,为每个$http请求添加auth权限请求:

var app = angular.module("myApp", ["ngRoute", "ngResource"])
    .constant('ACCESS_LEVELS',{
        PUB:1,
        USER:2
    })
    .config(["$routeProvider", "$httpProvider","ACCESS_LEVELS", function ($routeProvider, $httpProvider,ACCESS_LEVELS) {

        //设置http头
        $httpProvider.defaults.headers.common["X-Response-Code-By"] = "Angular1.5.8";

        var interceptor = function ($q, $rootScope, auth) {
            return {
                'response': function (res) {
                    //登录成功,设置authkey
                    if (res.config.url.indexOf('/api/v1/login')!=-1) {
                        auth.set(res.data.auth);
                    }
                    return res;
                },
                'responseError': function (rejection) {
                    switch (rejection.status) {
                        case 401:
                            if (res.config.url.indexOf('/api/v1/login')!=-1) {
                                // 如果当前不是在登录页面
                                $rootScope.$broadcast('auth:loginRequired');
                            }
                            break;
                        case 403:
                            $rootScope.$broadcast('auth:forbidden');
                            break;
                        case 404:
                            $rootScope.$broadcast('page:notFound');
                            break;
                        case 500:
                            $rootScope.$broadcast('server:error');
                            break;

                    }
                    return $q.reject(rejection);
                },
                'request': function (config) {

                    //为每条服务器请求加入auth权限
                    if(config.url.indexOf("api/v1/") > -1){
                        if(config.url.indexOf("?") != -1){
                            config.url += "&auth="+auth.get();
                        }else{
                            config.url += "?auth="+auth.get();
                        }

                    }
                    return config;
                },
                'requestError': function (rejection) {
                    if (canRecover(rejection)) {
                        return responseOrNewPromise
                    }
                    return $q.reject(rejection);
                },
            };
        };


        $httpProvider.interceptors.push(interceptor);

        //路由
        $routeProvider
            .when("/", {
                templateUrl: "view/main.html",
                controller: "controllerMain",
                access_level:ACCESS_LEVELS.PUB
            })
            .when("/list/:id", {
                templateUrl: "view/list.html",
                controller: "controllerList",
                access_level:ACCESS_LEVELS.PUB
            })
            .when("/about", {
                templateUrl: "view/about.html",
                controller: "controllerAbout",
                access_level:ACCESS_LEVELS.PUB
            })
            .when("/contact", {
                templateUrl: "view/contact.html",
                controller: "controllerContact",
                access_level:ACCESS_LEVELS.PUB
            })
            .when("/login", {
                templateUrl: "view/login.html",
                controller: "controllerLogin",
                access_level:ACCESS_LEVELS.PUB
            })
            .when("/register", {
                templateUrl: "view/register.html",
                controller: "controllerRegister",
                access_level:ACCESS_LEVELS.PUB
            })
            .when("/uc_enter", {
                templateUrl: "view/uc_enter.html",
                controller: "controllerUcenter",
                access_level:ACCESS_LEVELS.USER
            })
            .otherwise({redirectTo: '/'})
    }])
    .run(function ($rootScope, $location,auth,cookieUtils,ajax) {
        auth.set(cookieUtils.get("auth"));

        $rootScope.title = "本地网站";
        $rootScope.keywords = "网站的关键词";
        $rootScope.description = "网站的描述";

        $rootScope.isActive = function (score) {
            return score == $location.path();
        };

        //判断是否登录
        $rootScope.isLogin = function(){
            return !auth.get();
        }

        //路由开始
        $rootScope.$on('$routeChangeStart', function (evt, next, current) {

            //boot菜单选择器
            if($(".navbar-toggle").attr('aria-expanded') == "true"){
                $(".navbar-toggle").click();
            }
            if(next.$$route.access_level == 2 && auth.get().length == 0){
                toast("请先登录!");
                $location.path("/login");
            }
        });

        //路由成功
        $rootScope.$on('$routeChangeSuccess', function (evt, next, previous) {

        });

        //路由错误
        $rootScope.$on('$routeChangeError', function (current, previous, rejection) {
            c('$routeChangeError')
            c(current)
            c(previous)
            c(rejection)
        });

        //登出
        $rootScope.loginOut = function(){
            ajax.get("/api/v1/loginOut",{})
                .success(function(data){
                    if(data.response_code == 1){
                        auth.del();
                        if(toast(data.response_err)){
                            $location.path("/");
                        }

                    }
                })
        };
    })
.factory("UserSerice",function($q,$http,ajax){
    var _url = '/api/v1/user/';

    return {
        get:function(id,param){
            var defer = $q.defer();
            $http.get(ajax.parseParam(_url + id,param))
                .success(function(data){
                    defer.resolve(data);
                })
                .error(function(data){
                    defer.reject(data);
                })
            return defer.promise;
        },
        save:function(param){
            var defer = $q.defer();
            $http.post(_url,param)
                .success(function(data){
                    defer.resolve(data);
                })
                .error(function(data){
                    defer.reject(data);
                })
            return defer.promise;
        },
        put:function(id,param){
            var defer = $q.defer();
            $http.put(_url + id,param)
                .success(function(data){
                    defer.resolve(data);
                })
                .error(function(data){
                    defer.reject(data);
                })
            return defer.promise;
        }

    }
})
//用户权限校验
.factory("auth", function (cookieUtils) {
    var auth = '';
    return {
        set: function (a) {
            auth = a;
            cookieUtils.set('auth',typeof a == "string" ? a : '');
        },
        get: function () {
            return auth;
        },
        del:function(){
            auth = '';
            cookieUtils.del('auth');
            cookieUtils.del('user_name');
            cookieUtils.del('user_pwd');
        }
    }
})

 

 

 

 

 

jQuery的61种选择器

文整理了 jQuery 的61种选择器,助你write less,do more(写得更少,做得更多),赶紧来收吧!

  1. #id : 根据给定的ID匹配一个元素
12

3

4

5

6

7

<p id=”myId”>这是第一个p标签</p><p id=”not”>这是第二个p标签</p>

<script type=”text/javascript”>

$(function(){

$(“#myId”).css(“color”,”red”);

});

</script>

结果:

这是第一个p标签

这是第二个p标签

  1. element : 根据给定的元素标签名匹配所有元素
12

3

4

5

6

7

8

<div>这是div标签1</div><div>这是div标签2</div>

<p>这是p标签</p>

<script type=”text/javascript”>

$(function(){

$(“div”).css(“color”,”red”);

});

</script>

结果:

这是div标签1

这是div标签2

这是p标签

  1. .class : 根据给定的css类名匹配元素
12

3

4

5

6

7

<p class=”myClass”>这是第一个p标签</p><p class=”not”>这是第二个p标签</p>

<script type=”text/javascript”>

$(function(){

$(“.myClass”).css(“color”,”red”);

});

</script>

结果:

这是第一个p标签

这是第二个p标签

  1. * : 匹配所有元素,多用于结合上下文来搜索
12

3

4

5

6

7

<p>这是p标签</p><div>这是div标签</div>

<script type=”text/javascript”>

$(function(){

$(“*”).css(“color”,”red”);

});

</script>

结果:

这是p标签

这是div标签

  1. 多选择器selector1,selector2,selectorN : 指定任意多个选择器,并将匹配到的元素合并到一个结果内
12

3

4

5

6

7

8

9

<p class=”myP”>这是第一个p标签</p><p class=”not”>这是第二个p标签</p>

<div id=”myDiv”>这是第一个div标签</div>

<div id=”not”>这是第二个div标签</div>

<script type=”text/javascript”>

$(function(){

$(“p.myP,div#myDiv”).css(“color”,”red”);

});

</script>

结果:

这是第一个p标签

这是第二个p标签

这是第一个div标签

这是第二个div标签

  1. ancestor descendant : 在给定的祖先元素下匹配所有的后代元素
12

3

4

5

6

7

8

9

10

11

<div><span>这是第一个span标签</span>

<p>

<span>这是第二个span标签</span>

</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“div span”).css(“color”,”red”);

});

</script>

结果:

这是第一个span标签

这是第二个span标签

  1. parent > child : 在给定的父元素下匹配所有的子元素
12

3

4

5

6

7

8

9

10

11

<div><span>这是第一个span标签</span>

<p>

<span>这是第二个span标签</span>

</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“div > span”).css(“color”,”red”);

});

</script>

结果:

这是第一个span标签

这是第二个span标签

  1. prev + next : 匹配所有紧接在 prev 元素后的 next 元素
12

3

4

5

6

7

8

<div></div><p>这是第一个p标签</p>

<p>这是第二个p标签</p>

<script type=”text/javascript”>

$(function(){

$(“div + p”).css(“color”,”red”);

});

</script>

结果:

这是第一个p标签

这是第二个p标签

  1. prev ~ siblings : 匹配 prev 元素之后的所有 siblings 同辈元素
12

3

4

5

6

7

8

9

10

<p>这是第一个p标签</p><div>

<p>这是第二个p标签</p>

</div>

<p>这是第三个p标签</p>

<script type=”text/javascript”>

$(function(){

$(“div ~ p”).css(“color”,”red”);

});

</script>

结果:

这是第一个p标签

这是第二个p标签

这是第三个p标签

  1. :first : 获取第一个元素
12

3

4

5

6

7

8

9

10

<div><p>这是第一个p标签</p>

<p>这是第二个p标签</p>

<p>这是第三个p标签</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“p:first”).css(“color”,”red”);

});

</script>

结果:

这是第一个p标签

这是第二个p标签

这是第三个p标签

  1. :not(selector) : 去除所有与给定选择器匹配的元素
12

3

4

5

6

7

8

<p class=”del”>这是第一个p标签</p><p class=”del”>这是第二个p标签</p>

<p>这是第三个p标签</p>

<script type=”text/javascript”>

$(function(){

$(“p:not(.del)”).css(“color”,”red”);

});

</script>

结果:

这是第一个p标签

这是第二个p标签

这是第三个p标签

12.:even : 匹配所有索引值为偶数的元素,从 0 开始计数

12

3

4

5

6

7

8

9

<p>这是索引值为0的p标签</p><p>这是索引值为1的p标签</p>

<p>这是索引值为2的p标签</p>

<p>这是索引值为3的p标签</p>

<script type=”text/javascript”>

$(function(){

$(“p:even”).css(“color”,”red”);

});

</script>

结果:

这是索引值为0的p标签

这是索引值为1的p标签

这是索引值为2的p标签

这是索引值为3的p标签

  1. :odd : 匹配所有索引值为奇数的元素,从 0 开始计数
12

3

4

5

6

7

8

9

<p>这是索引值为0的p标签</p><p>这是索引值为1的p标签</p>

<p>这是索引值为2的p标签</p>

<p>这是索引值为3的p标签</p>

<script type=”text/javascript”>

$(function(){

$(“p:odd”).css(“color”,”red”);

});

</script>

结果:

这是索引值为0的p标签

这是索引值为1的p标签

这是索引值为2的p标签

这是索引值为3的p标签

  1. :eq(index) : 匹配一个给定索引值的元素
12

3

4

5

6

7

8

<p>这是索引值为0的p标签</p><p>这是索引值为1的p标签</p>

<p>这是索引值为2的p标签</p>

<script type=”text/javascript”>

$(function(){

$(“p:eq(1)”).css(“color”,”red”);

});

</script>

结果:

这是索引值为0的p标签

这是索引值为1的p标签

这是索引值为2的p标签

  1. :gt(index) : 匹配所有大于给定索引值的元素
12

3

4

5

6

7

8

<p>这是索引值为0的p标签</p><p>这是索引值为1的p标签</p>

<p>这是索引值为2的p标签</p>

<script type=”text/javascript”>

$(function(){

$(“p:gt(1)”).css(“color”,”red”);

});

</script>

结果:

这是索引值为0的p标签

这是索引值为1的p标签

这是索引值为2的p标签

  1. :lang(language) : 选择指定语言的所有元素
12

3

4

5

6

7

8

<div lang=”not”>这是lang=”not”的div标签</div><div lang=”en”>这是lang=”en”的div标签</div>

<div lang=”en-us”>这是lang=”en-us”的div标签</div>

<script type=”text/javascript”>

$(function(){

$(“div:lang(en)”).css(“color”,”red”);

});

</script>

结果:

这是lang=”not”的div标签

这是lang=”en”的div标签

这是lang=”en-us”的div标签

  1. :last() : 获取最后个元素
12

3

4

5

6

7

8

9

10

<div><p>这是第一个p标签</p>

<p>这是第二个p标签</p>

<p>这是第三个p标签</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“p:last”).css(“color”,”red”);

});

</script>

结果:

这是第一个p标签

这是第二个p标签

这是第三个p标签

  1. :lt(index) : 匹配所有小于给定索引值的元素
12

3

4

5

6

7

8

<p>这是索引值为0的p标签</p><p>这是索引值为1的p标签</p>

<p>这是索引值为2的p标签</p>

<script type=”text/javascript”>

$(function(){

$(“p:lt(1)”).css(“color”,”red”);

});

</script>

结果:

这是索引值为0的p标签

这是索引值为1的p标签

这是索引值为2的p标签

  1. :header : 匹配如 h1, h2, h3之类的标题元素
12

3

4

5

6

7

8

<p>这是p标签</p><h3>这是h3标签</h3>

<h4>这是h4标签</h4>

<script type=”text/javascript”>

$(function(){

$(“:header”).css(“color”,”red”);

});

</script>

结果:

这是p标签

这是h3标签

这是h4标签

  1. :animated : 匹配所有正在执行动画效果的元素
12

3

4

5

6

7

8

9

<!–对不在执行动画的元素执行一个动画–><button id=”run”>Run</button>

<div style=”width:100px;height:100px;border:1px solid #f00;position:absolute;”></div>

<script type=”text/javascript”>

$(function(){

$(“#run”).click(function(){

$(“div:not(:animated)”).animate({left:100+”px”},1000);

});

});

由于此处无法插入js代码,请自行复制代码查看效果

  1. :focus : 匹配当前获取焦点的元素
12

3

<input type=”text” /><script type=”text/javascript”>$(function(){$(“input”).focus();     //让input自动获取焦点    $(“input:focus”).css(“background”,”red”);

});

结果:

  1. :root : 选择该文档的根元素,在HTML中,文档的根元素,和$(“:root”)选择的元素一样,永远是<html>元素
12 <script type=”text/javascript”>$(“:root”).css(“background-color”,”yellow”);</script>
  1. :target : 选择由文档URI的格式化识别码表示的目标元素

例如,给定的URI http://example.com/#foo, $( “p:target” ),将选择<p id=”foo”>元素。

  1. :contains(text) : 匹配包含给定文本的元素
12

3

4

5

6

7

8

<div>boys</div><div>girls</div>

<div>boys and girls</div>

<script type=”text/javascript”>

$(function(){

$(“div:contains(‘boys’)”).css(“color”,”red”);

});

</script>

结果:

boys

girls

boys and girls

  1. :empty : 匹配所有不包含子元素或者文本的空元素
12

3

4

5

6

7

8

9

<p>这是有内容的p标签</p><p></p>

<p>这是有内容的p标签</p>

<p></p>

<script type=”text/javascript”>

$(function(){

$(“p:empty”).css({“width”:30,”height”:30,”background”:”red”});

});

</script>

结果:

这是有内容的p标签

这是有内容的p标签

 

  1. :has(selector) : 匹配含有选择器所匹配的元素的元素
12

3

4

5

6

7

8

9

<div>这是包含p元素的div标签<p>这是div标签中的p标签</p>

</div>

<div>这是没有p元素的div标签</div>

<script type=”text/javascript”>

$(function(){

$(“div:has(p)”).css(“color”,”red”);

});

</script>

结果:

这是包含p元素的div标签

这是div标签中的p标签

这是没有p元素的div标签

  1. :parent : 匹配含有子元素或者文本的元素
12

3

4

5

6

7

8

9

10

<div><p>这是div标签中的p标签</p>

</div>

<div>这是有内容的div标签</div>

<div></div>

<script type=”text/javascript”>

$(function(){

$(“div:parent”).css(“color”,”red”);

});

</script>

结果:

这是div标签中的p标签

这是有内容的div标签

  1. :hidden : 匹配所有不可见元素,或者typehidden的元素
12

3

4

5

6

7

8

<div style=”display: none;”>这是隐藏的div标签</div><div>这是显示的div标签</div>

<script type=”text/javascript”>

$(function(){

$(“div:hidden”).css(“color”,”red”);

console.log($(“div:hidden”));    //结果:获取到隐藏的div

});

</script>

结果:

  1. :visible : 匹配所有的可见元素
12

3

4

5

6

7

8

<div style=”display: none;”>这是隐藏的div标签</div><div>这是显示的div标签</div>

<script type=”text/javascript”>

$(function(){

$(“div:visible”).css(“color”,”red”);

console.log($(“div:visible”));        //结果:获取到显示的div

});

</script>

结果:

  1. [attribute] : 匹配包含给定属性的元素
12

3

4

5

6

7

<div class=”myDiv”>这是有类名的div标签</div><div>这是没类名的div标签</div>

<script type=”text/javascript”>

$(function(){

$(“div[class]”).css(“color”,”red”);

});

</script>

结果:

这是有类名的div标签

这是没类名的div标签

  1. [attribute=value] : 匹配给定的属性是某个特定值的元素
12

3

4

5

6

7

<div class=”myDiv”>这是第一个div标签</div><div class=”not”>这是第二个div标签</div>

<script type=”text/javascript”>

$(function(){

$(“div[class=’myDiv’]”).css(“color”,”red”);

});

</script>

结果:

这是第一个div标签

这是第二个div标签

  1. [attribute!=value] : 匹配所有不含有指定的属性,或者属性不等于特定值的元素
12

3

4

5

6

7

<div class=”myDiv”>这是第一个div标签</div><div class=”not”>这是第二个div标签</div>

<script type=”text/javascript”>

$(function(){

$(“div[class!=’myDiv’]”).css(“color”,”red”);

});

</script>

结果:

这是第一个div标签

这是第二个div标签

  1. [attribute^=value] : 匹配给定的属性是以某些值开始的元素
12

3

4

5

6

7

8

<div class=”myDiv”>这是第一个div标签</div><div class=”not”>这是第二个div标签</div>

<div class=”myBaby”>这是第三个div标签</div>

<script type=”text/javascript”>

$(function(){

$(“div[class^=’my’]”).css(“color”,”red”);

});

</script>

结果:

这是第一个div标签

这是第二个div标签

这是第三个div标签

  1. [attribute$=value] : 匹配给定的属性是以某些值结尾的元素
12

3

4

5

6

7

8

<div class=”myDiv”>这是第一个div标签</div><div class=”not”>这是第二个div标签</div>

<div class=”yourDiv”>这是第三个div标签</div>

<script type=”text/javascript”>

$(function(){

$(“div[class$=’Div’]”).css(“color”,”red”);

});

</script>

结果:

这是第一个div标签

这是第二个div标签

这是第三个div标签

  1. [attribute*=value] : 匹配给定的属性是以包含某些值的元素
12

3

4

5

6

7

8

<div class=”myDivOne”>这是第一个div标签</div><div class=”not”>这是第二个div标签</div>

<div class=”myDivTwo”>这是第三个div标签</div>

<script type=”text/javascript”>

$(function(){

$(“div[class*=’Div’]”).css(“color”,”red”);

});

</script>

结果:

这是第一个div标签

这是第二个div标签

这是第三个div标签

  1. [attrSel1][attrSel2][attrSelN] : 复合属性选择器,需要同时满足多个条件时使用
12

3

4

5

6

7

8

<div id=”myDiv” class=”myDivOne”>这是第一个div标签</div><div class=”not”>这是第二个div标签</div>

<div class=”myDivTwo”>这是第三个div标签</div>

<script type=”text/javascript”>

$(function(){

$(“div[id][class*=’Div’]”).css(“color”,”red”);

});

</script>

结果:

这是第一个div标签

这是第二个div标签

这是第三个div标签

  1. :first-child : 匹配第一个子元素,类似的 :first 匹配第一个元素,而此选择符将为每个父元素匹配一个子元素
12

3

4

5

6

7

8

9

10

11

12

13

<div><p>这是第一个div中的第一个p标签</p>

<p>这是第一个div中的第二个p标签</p>

</div>

<div>

<p>这是第二个div中的第一个p标签</p>

<p>这是第二个div中的第二个p标签</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“div p:first-child”).css(“color”,”red”);

});

</script>

结果:

这是第一个div中的第一个p标签

这是第一个div中的第二个p标签

这是第二个div中的第一个p标签

这是第二个div中的第二个p标签

  1. :first-of-type : 结构化伪类,匹配E的父元素的第一个E类型的子元素
12

3

4

5

6

7

8

9

10

11

12

13

14

<div><div>这是第一个div中的div标签</div>

<p>这是第一个div中的第一个p标签</p>

<p>这是第一个div中的第二个p标签</p>

</div>

<div>

<p>这是第二个div中的第一个p标签</p>

<p>这是第二个div中的第二个p标签</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“p:first-of-type”).css(“color”,”red”);

});

</script>

结果:

这是第一个div中div标签

这是第一个div中的第一个p标签

这是第一个div中的第二个p标签

这是第二个div中的第一个p标签

这是第二个div中的第二个p标签

  1. :last-child : 匹配最后一个子元素,类似的 :last 只匹配最后一个元素,而此选择符将为每个父元素匹配最后一个子元素
12

3

4

5

6

7

8

9

10

11

12

13

<div><p>这是第一个div中的第一个p标签</p>

<p>这是第一个div中的第二个p标签</p>

</div>

<div>

<p>这是第二个div中的第一个p标签</p>

<p>这是第二个div中的第二个p标签</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“div p:last-child”).css(“color”,”red”);

});

</script>

结果:

这是第一个div中的第一个p标签

这是第一个div中的第二个p标签

这是第二个div中的第一个p标签

这是第二个div中的第二个p标签

  1. :last-of-type : 结构化伪类,匹配E的父元素的最后一个E类型的子元素,大体的意思跟 :first-of-type 差不多,只是一个是第一个元素,一个是最后一个元素
12

3

4

5

6

7

8

9

10

11

12

13

14

<div><p>这是第一个div中的第一个p标签</p>

<p>这是第一个div中的第二个p标签</p>

<div>这是第一个div中的div标签</div>

</div>

<div>

<p>这是第二个div中的第一个p标签</p>

<p>这是第二个div中的第二个p标签</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“p:last-of-type”).css(“color”,”red”);

});

</script>

结果:

这是第一个div中的第一个p标签

这是第一个div中的第二个p标签

这是第一个div中的div标签

这是第二个div中的第一个p标签

这是第二个div中的第二个p标签

  1. :nth-child : 匹配其父元素下的第N个子或奇偶元素

注意!:eq(index)是从0开始,而这里的 :nth-child的序号是从1开始的

12

3

4

5

6

7

8

9

10

11

12

13

<div><p>这是第一个div中的第一个p标签</p>

<p>这是第一个div中的第二个p标签</p>

</div>

<div>

<p>这是第二个div中的第一个p标签</p>

<p>这是第二个div中的第二个p标签</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“div p:nth-child(2)”).css(“color”,”red”);

});

</script>

结果:

这是第一个div中的第一个p标签

这是第一个div中的第二个p标签

这是第二个div中的第一个p标签

这是第二个div中的第二个p标签

  1. :nth-last-child : 选择所有他们父元素的第n个子元素,计数从最后一个元素开始到第一个,序号从1开始

 注意:要有父级元素

12

3

4

5

6

7

8

9

10

<div><p>这是div中的第一个p标签</p>

<p>这是div中的第二个p标签</p>

<p>这是div中的第三个p标签</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“div p:nth-last-child(1)”).css(“color”,”red”);

});

</script>

结果:

这是div中的第一个p标签

这是div中的第二个p标签

这是div中的第三个p标签

  1. nth-last-of-type : 选择的所有他们的父级元素的第n个子元素,计数从最后一个元素到第一个,序号从1开始
12

3

4

5

6

7

8

9

10

11

<div><p>这是div中的第一个p标签</p>

<p>这是div中的第二个p标签</p>

<p>这是div中的第三个p标签</p>

<div>这是div中的div标签</div>

</div>

<script type=”text/javascript”>

$(function(){

$(“p:nth-last-of-type(1)”).css(“color”,”red”);

});

</script>

结果:

这是div中的第一个p标签

这是div中的第二个p标签

这是div中的第三个p标签

这是div中的div标签

  1. :nth-of-type : 选择同属于一个父元素之下,并且标签名相同的子元素中的第n个,序号从1开始
12

3

4

5

6

7

8

9

10

11

12

13

14

<div><div>这是div标签</div>

<p>这是第一个p标签</p>

<div>

<p>这是第二个p标签</p>

<p>这是第三个p标签</p>

</div>

<p>这是第四个p标签</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“p:nth-of-type(2)”).css(“color”,”red”);

});

</script>

结果:

这是div标签

这是第一个p标签

这是第二个p标签

这是第三个p标签

这是第四个p标签

  1. :only-child : 如果某个元素是父元素中唯一的子元素,那将会被匹配,如果父元素中含有其他元素,那将不会被匹配
12

3

4

5

6

7

8

9

10

11

12

<div><div>这是div标签</div>

<p>这是第一个p标签</p>

</div>

<div>

<p>这是第二个p标签</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“p:only-child”).css(“color”,”red”);

});

</script>

结果:

这是div标签

这是第一个p标签

这是第二个p标签

  1. :only-of-type : 选择所有没有兄弟元素,且具有相同的元素名称的元素,如果父元素有相同的元素名称的其他子元素,那么没有元素会被匹配
12

3

4

5

6

7

8

9

10

11

12

13

<div><div>这是div标签</div>

<p>这是第一个p标签</p>

</div>

<div>

<p>这是第二个p标签</p>

<p>这是第三个p标签</p>

</div>

<script type=”text/javascript”>

$(function(){

$(“p:only-of-type”).css(“color”,”red”);

});

</script>

结果:

这是div标签

这是第一个p标签

这是第二个p标签

这是第三个p标签

  1. :input : 匹配所有 input, textarea, select button 元素
12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<form><input type=”text” />

<input type=”button” />

<input type=”checkbox” />

<input type=”password” />

<input type=”radio” />

<input type=”reset” />

<input type=”submit” />

<select><option>Option</option></select>

<textarea></textarea>

<button>Button</button>

</form>

<script type=”text/javascript”>

$(function(){

$(“:input”).css(“color”,”red”);

});

</script>

结果:

 

  1. :text : 匹配所有的单行文本框
12

3

4

5

6

7

8

9

10

11

12

<form><input type=”text” />

<input type=”password” />

<input type=”radio” />

<input type=”reset” />

<input type=”submit” />

</form>

<script type=”text/javascript”>

$(function(){

$(“:text”).css(“color”,”red”);

});

</script>

结果:

  1. :password : 匹配所有密码框
12

3

4

5

6

7

8

9

10

<form><input type=”text” />

<input type=”password” />

<input type=”submit” />

</form>

<script type=”text/javascript”>

$(function(){

$(“:password”).css(“color”,”red”);

});

</script>

结果:

  1. :radio : 匹配所有单选按钮
12

3

4

5

6

7

8

9

10

11

<form><input type=”text” />

<input type=”password” />

<input type=”radio” />

<input type=”radio” />

</form>

<script type=”text/javascript”>

$(function(){

$(“:radio”).css(“color”,”red”);

});

</script>

结果:

  1. :checkbox : 匹配所有复选框
12

3

4

5

6

7

8

9

10

11

<form><input type=”text” />

<input type=”password” />

<input type=”checkbox” />

<input type=”checkbox” />

</form>

<script type=”text/javascript”>

$(function(){

$(“:checkbox”).css(“color”,”red”);

});

</script>

结果:

  1. :submit : 匹配所有提交按钮
12

3

4

5

6

7

8

<form><input type=”submit” />

</form>

<script type=”text/javascript”>

$(function(){

$(“:submit”).css(“color”,”red”);

});

</script>

结果:

  1. :image : 匹配所有图像域
12

3

4

5

6

7

8

<form><input type=”image”/>

</form>

<script type=”text/javascript”>

$(function(){

$(“:image”).css(“color”,”red”);

});

</script>

  1. :reset : 匹配所重置按钮
12

3

4

5

6

7

8

<form><input type=”reset” />

</form>

<script type=”text/javascript”>

$(function(){

$(“:reset”).css(“color”,”red”);

});

</script>

结果:

  1. :button : 匹配所有按钮
12

3

4

5

6

7

8

9

<form><button>Button1</button>

<button>Button2</button>

</form>

<script type=”text/javascript”>

$(function(){

$(“:button”).css(“color”,”red”);

});

</script>

结果:

  1. :file : 匹配所有文件域
12

3

4

5

6

7

8

<form><input type=”file” />

</form>

<script type=”text/javascript”>

$(function(){

$(“:file”).css(“color”,”red”);

});

</script>

  1. :enabled : 匹配所有可用元素
12

3

4

5

6

7

8

9

<form><input type=”submit” disabled=”disabled” />

<input type=”reset” />

</form>

<script type=”text/javascript”>

$(function(){

$(“:enabled”).css(“color”,”red”);

});

</script>

结果:

  1. :disabled : 匹配所有不可用元素
12

3

4

5

6

7

8

9

<form><input type=”submit” disabled=”disabled” />

<input type=”reset” />

</form>

<script type=”text/javascript”>

$(function(){

$(“:disabled”).css(“color”,”red”);

});

</script>

结果:

  1. :checked : 匹配所有选中的被选中元素(复选框、单选框等,select中的option),对于select元素来说,获取选中推荐使用 :selected
12

3

4

5

6

7

8

9

10

<form><input type=”checkbox” name=”news” checked=”checked” />

<input type=”checkbox” name=”news” />

<input type=”checkbox” name=”news” checked=”checked” />

</form>

<script type=”text/javascript”>

$(function(){

$(“:checked”).css(“color”,”red”);

});

</script>

  1. :selected : 匹配所有选中的option元素
12

3

4

5

6

7

8

9

10

<select><option value=”1″>basketball</option>

<option value=”2″ selected=”selected”>football</option>

<option value=”3″>swim</option>

</select>

<script type=”text/javascript”>

$(function(){

$(“select option:selected”).css(“color”,”red”);

});

</script>

结果:

  1. $.escapeSelector(selector) : 这个方法通常被用在类选择器或者ID选择器中包含一些CSS特殊字符的时候,这个方法基本上与CSSCSS.escape()方法类似,唯一的区别是jquery中的这个方法支持所有浏览器。

该选择器在jQuery库3.0版本才开始有

12

3

<!–对含有#号的ID进行编码–><script type=”text/javascript”>$(function(){

$.escapeSelector( “#target” ); // “\#target”     });</script>

 

AngularJS中$http、$httpProvider、$resource操作笔记

1.设置httpProvider头

var app = angular.module(“Myapp”, [‘ngRoute’])
.config([‘$locationProvider’,’apikey’,function($locationProvider,apikey){
$locationProvider.html5Mode(false);
$locationProvider.hashPrefix(“!”)
}])
.config(function ($routeProvider,$httpProvider) {
//设置http头
$httpProvider.defaults.headers.common[“X-Response-Code-By”] = “Angular1.3.8″;

AngularJS服务factory,service,provider,value,constant

AngularJS服务

AngularJS提供了一些内置服务,在任何地方使用它们的方式都是统一的。同时,为复杂应用创建我们自己的服务也是非常有用的。

在AngularJS中创建自己的服务是非常容易的:只需要注册这个服务即可。服务被注册后,AngularJS编译器就可以引用它,并且在运行时把它当作依赖加载进来。服务名称的注册表使得在测试中伪造和剔除相互隔离的应用依赖变得非常容易。

注册一个服务

.factory(“testFac”,function(){
return{
getA:function(a){
return a;
},
getB:function(b){
c(b)
}
}
})

其中这个服务包含了2个方法,只需要在控制器中引用testFac就可以直接使用这2个方法,就可以了;这只是一次服务演示。当然,这2个方法是非常枯燥无味的;但是,假设你需要对用户信息进行验证,或者你需要读取用户的一些信息,那么这个服务就不枯燥无味了。

1234519