angularJS移动应用触摸touch事件

首先我们定义一个指定(directive),如下面代码:

.directive('myTouchEven', ['$swipe', "$rootScope", function ($swipe, $rootScope) {
    return {
        restrict: 'EA',
        link: function (scope, ele, attrs, ctrl) {
            var startX, pointY;
            $swipe.bind(ele, {
                'start': function (coords) {
                    startX = coords.x;
                    pointY = coords.y;
                    c("startX:" + startX + "pointY:" + pointY)
                },
                'move': function (coords) {
                    var a = coords.x - startX;
                    if (a < -100 && a > -110) {
                        startX = coords.x;
                        $rootScope.$broadcast("TouchEven", "back");
                    } else if (a > 100 && a < 110) {
                        startX = coords.x;
                        $rootScope.$broadcast("TouchEven", "next");
                    }
                    c("move:" + a + " coords.x:" + coords.x)

                },
                'end': function (coords) {
                    c("end")
                    c("endX:" + coords.x + "endY:" + coords.y)
                },
                'cancel': function (coords) {
                    c("cancel")
                }
            });
        }
    }
}])

这里使用$swipe来帮顶触摸事件,在start事件中记录开始点击的坐标值(x、y)的数据;然后我们监控move事件,计算当前的坐标值(x、y)于开始点击的坐标值相差是多少,如果大于或者小于我们设定的数值,那么则发送一个全局广播,这里注入了$rootScope,用来发送全局广播($broadcast),其他指令(directive)、服务(service)、控制器(controller)等只要注册了(TouchEven)广播监听,就能接收到我们发送的广播事件,下面是示例代码:

.controller("ListController", function ($scope, $routeParams,ajax) {
    $scope.pages = 1;

    $scope.$on("TouchEven",function(a,b){
        var is_send = null;
        if(is_send == null){
            is_send = 1;

            if(b == "back"){
                $scope.pages -= 1;
            }else if(b == "next"){
                $scope.pages += 1;
            }

            ajax.get("/api/v1/articleList",{pages:$scope.pages})
                .success(function(data){
                    is_send = null;
                    c(data)
                    /**
                     * write something code.
                     */

                })
                .error(function(err){
                    is_send = null;
                    toast(err.response_err)
                    /**
                     * write something code.
                     */
                })


        }


    });
    
})

 

 

angularJS使用directive指令、filter来做表单过滤器

directive做过滤器要人性化很多,但是如果是简单的过滤也可以使用filter来做,设置一个全局变量保存数据验证结果,等到提交表单的时候验证全局变量就可以了:

.directive("myFilter",function(){
    var css = {
        _valid:function(ele){
            ele.removeClass("ng-invalid");
            ele.next().removeClass("hide");
            ele.next().removeClass("input_remove");
            ele.next().removeClass("glyphicon-remove");

            ele.addClass("ng-valid");
            ele.next().addClass("input_ok");
            ele.next().addClass("glyphicon-ok");
        },
        _invalid:function(ele){
            ele.removeClass("ng-valid");
            ele.next().removeClass("input_ok");
            ele.next().removeClass("glyphicon-ok");

            ele.addClass("ng-invalid");
            ele.next().addClass("input_remove");
            ele.next().addClass("glyphicon-remove");
        }
    };
    return {
        require:'ngModel',
        link:function(scope,ele,arrts){
            scope.$watch(arrts.ngModel,function(newVal,oldVal){
                if(typeof newVal != "undefined"){
                    css._valid(ele);
                    if(typeof arrts.type != "undefined"){
                        switch (arrts.type){
                            case 'text':
                                if(typeof newVal != "string"){
                                    css._invalid(ele);
                                }

                                if(typeof arrts.min != "undefined"){
                                    if(newVal.length < arrts.min){
                                        css._invalid(ele);
                                    }
                                }

                                if(typeof arrts.max != "undefined"){
                                    if(newVal.length > arrts.max){
                                        css._invalid(ele);
                                    }
                                }
                                break;
                            case 'number2':
                                var filter  = /^[0-9]+.?[0-9]*$/;
                                if(!filter.test(newVal)){
                                    css._invalid(ele);
                                }

                                if(typeof arrts.min != "undefined"){
                                    if(newVal < parseInt(arrts.min)){

                                        css._invalid(ele);
                                    }
                                }

                                if(typeof arrts.max != "undefined"){
                                    if(newVal > parseInt(arrts.max)){
                                        css._invalid(ele);
                                    }
                                }
                                break;
                            case 'email2':
                                var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
                                if(!filter.test(newVal)){
                                    css._invalid(ele);
                                }
                                break;
                        }
                    }
                }


            });
        }

    };
})
.filter('email2',function(){
    //感觉这个不人性化,也可能是我不会用吧
    return function(input,length){
        if(typeof input == "undefined" || length < input.length){
            //c("输入不合规");
        }
        return input;
    }
})

 

下面是style的代码:

input.ng-invalid {
    border: 1px solid red;
}
input.ng-valid {
    border: 1px solid green;
}
.input_ok{
    position: absolute;
    z-index: 100;
    right: 1%;
    top: 8px;
    color: #299429;
}
.input_remove{
    position: absolute;
    z-index: 100;
    right: 1%;
    top: 8px;
    color: #ff0000;
}
.form-contant p{
    position: relative;
}

下面是表单html的代码:

<div class="form-contant">
    <h1>Register</h1>
    <p>
        <input type="text" ng-model="user_name" placeholder="请输入用户名" class="form-control" my-filter data="{{user_name|email2:4}}" min="4" max="20">
        <i class="glyphicon glyphicon-ok hide"></i>
    </p>
    <p>
        <input type="text" ng-model="user_pwd" placeholder="请输入密码" class="form-control" my-filter min="4" max="20">
        <i class="glyphicon glyphicon-ok hide"></i>
    </p>
    <p>
        <input type="number2" ng-model="age" placeholder="请输入年龄" class="form-control" my-filter min="4" max="102">
        <i class="glyphicon glyphicon-ok hide"></i>
    </p>
    <p>
        <input type="email2" ng-model="email" placeholder="请输入邮箱" class="form-control" value="" my-filter  min="6" max="50">
        <i class="glyphicon glyphicon-ok hide"></i>
    </p>


    <br>
    <button type="button" class="form-control" ng-click="get()">get</button>
    <button type="button" class="form-control" ng-click="save()">save</button>
    <button type="button" class="form-control" ng-click="put()">put</button>
</div>

 

 

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>

 

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