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″;

Quantum Espresso 安装步骤

首先确保你电脑安装了gfortran和mpi文件
1.编译前先安装gfortran
sudo apt-get install build-essential gcc gfortran

然后自动配置
$ ./configure

然后编译
$ make all

2.并行编译
先安装并行编译器和并行编译库openmpi,
sudo apt-get install openmpi-bin
然后
$ ./configure
$ make all

3.编译测试QE
把QE文件夹拷到home下,然后执行下面的语句。其中需要一些相关的附件文件夹,已经在QE压缩包里了,可以直接用。

cd QE/
ls
cd espresso-5.0.1/
ls
./configure -enable-mpi=yes
make install
make all

过上十几分钟基本上就可以进行测试成功了。

15051525354115
 
Copyright © 2008-2021 lanxinbase.com Rights Reserved. | 粤ICP备14086738号-3 |