JQuery基础

选择器

  • 按ID查找:var div = $('#abc');
  • 按tag查找:var ps = $('p');
  • 按class查找:var a = $('.red');
  • 按属性查找:var email = $('[name=email]');

    • 按属性查找还可以使用前缀查找或者后缀查找:
    • var icons = $('[name^=icon]');找出所有name属性值以icon开头的DOM
    • var names = $('[name$=with]');找出所有name属性值以with结尾的DOM
  • 组合查找:就是把上述简单选择器组合起来使用。
  • 多项选择器:就是把多个选择器用,组合起来一块选。
  • 层级选择器:如果两个DOM元素具有层级关系,就可以用$('father sonAndGrandson')来选择,层级之间用空格隔开
  • 子选择器:子选择器$('parent>child')类似层级选择器,但是限定了层级关系必须是父子关系,就是<child>节点必须是<parent>节点的直属子节点。
  • 过滤器:过滤器一般不单独使用,它通常附加在选择器上,帮助我们更精确地定位元素:
$('ul.lang li'); // 选出JavaScript、Python和Lua 3个节点

$('ul.lang li:first-child'); // 仅选出JavaScript
$('ul.lang li:last-child'); // 仅选出Lua
$('ul.lang li:nth-child(2)'); // 选出第N个元素,N从1开始
$('ul.lang li:nth-child(even)'); // 选出序号为偶数的元素
$('ul.lang li:nth-child(odd)'); // 选出序号为奇数的元素

层级选择器:

层级选择器例子说明
ancestor descendantA B获得A元素内部的所有的B元素(子孙)-- 后代
parent > childA > B获得A元素下面的所有B子元素(父子) children
prev + nextA + B获得A元素同级下一个B元素(兄弟)
prev ~ siblingsA ~ B获得A元素之后的所有B元素(兄弟)

表单相关特殊选择器:

  • :input:可以选择<input><textarea><select><button>
  • :file:可以选择<input type="file">,和input[type=file]一样;
  • :checkbox:可以选择复选框,和input[type=checkbox]一样;
  • :radio:可以选择单选框,和input[type=radio]一样;
  • :focus:可以选择当前输入焦点的元素,例如把光标放到一个<input>上,用$('input:focus')就可以选出;
  • :checked:选择当前勾上的单选框和复选框,用这个选择器可以立刻获得用户选择的项目,如$('input[type=radio]:checked')
  • :enabled:可以选择可以正常输入的<input><select> 等,也就是没有灰掉的输入;
  • :disabled:和:enabled正好相反,选择那些不能输入的。

表单对象属性选择器:

表单属性选择器的名称描述
:enabled匹配所有可用元素
:disabled匹配所有不可用元素
:checked选取匹配所有被选中的元素 (单选框、复选框)
:selected选取匹配所有被选中项元素 (下拉列表框)

以及:

$('div:visible'); // 所有可见的div
$('div:hidden'); // 所有隐藏的div

查找和过滤

当我们拿到一个jQuery对象后,还可以以这个对象为基准,进行查找和过滤。最常见的查找是在某个节点的所有子节点中查找,使用find()方法,它本身又接收一个任意的选择器。

  • find():在该节点的子节点继续筛选
  • parent():向上查找
  • next()prev():查找同级节点

过滤

和函数式编程的map、filter类似,jQuery对象也有类似的方法。(注意函数里的this绑定为DOM对象,而非JQuery对象)

  • filter()方法可以过滤掉不符合选择器条件的节点
  • map()方法把一个jQuery对象包含的若干DOM节点转化为其他对象
  • first()last()slice():如果一个jQuery对象如果包含了不止一个DOM节点,此方法可以返回一个新的jQuery对象,把不需要的DOM节点去掉

过滤选择器:

过滤选择器名称说明
:first选择匹配到的元素中的第一个元素
:last选择匹配到的元素中的最后一个元素
:even选择匹配到的元素中索引号为偶数的所有元素,index从0开始
:odd选择匹配到的元素中索引号为奇数的所有元素,index从0开始
:eq(index)选择匹配到的元素中索引号为index的一个元素,index从0开始
:gt(index) greater than选择匹配到的元素中索引号大于index的所有元素,index从0开始
:lt(index) less than选择匹配到的元素中索引号小于index的所有元素,index从0开始
:not(..)选择匹配不包括指定内容的元素

属性选择器:

选择器说明
标签名[属性名]具有该属性的标签
标签名[属性名='值']属性为该值的标签
标签名[属性名!='值']属性不为该值的标签
标签名[属性名^='值']属性以该值开始的标签
标签名[属性名$='值']属性以该值结束的标签

操作DOM

DOM和JQuery对象互相转化:

//DOM转JQuery对象
$(JS对象);
//JQuery转DOM对象
JQ对象[0];//推荐
JQ对象.get(0);

修改文本

text()html()
传参即为设置,不传参即为获取,两者区别在于html()可以内嵌Html语句,而text()会自动转化为转义文本。

设置属性

设置CSS
css('name', 'value')或者css({'name':'value', 'name2':'value2'})
设置value属性val()
设置class

var div = $('#test-div');
div.hasClass('highlight'); // false, class是否包含highlight
div.addClass('highlight'); // 添加highlight这个class
div.removeClass('highlight'); // 删除highlight这个class
div.toggleClass('highlight')//切换class属性样式。即没有时添加,有的时候删除。

显示和隐藏DOM

a.hide(); // 隐藏
a.show(); // 显示

获取DOM信息

width()
height()

attr()和prop()
attr()removeAttr()prop()removeProp()
系统属性优先使用prop(),自定义属性使用attr()
attr()prop()对于属性checked处理有所不同:

var radio = $('#test-radio');
radio.attr('checked'); // 'checked'
radio.prop('checked'); // true
//prop()返回值更合理一些。不过,用is()方法判断更好:
radio.is(':checked'); // true

操作表单

对于表单元素,jQuery对象统一提供val()方法获取和设置对应的value属性。

修改DOM结构

append()追加一个DOM(如果要添加的DOM节点已经存在于HTML文档中,它会首先从文档移除,然后再添加,也就是说,用append(),你可以移动一个DOM节点。)
prepend()在最前添加节点
同级节点可以用after()或者before()方法
remove()删除该节点
父元素.empty()清空父节点

方法描述
$('<div>Something</div>')整个标签写出来就可以了创建该元素
父元素.append(子元素)追加为父元素的最后一个子元素(主操作方是父元素)
父元素.prepend(子元素)追加为父元素的第一个子元素(主操作方是父元素)
元素.before(元素)当前元素前添加一个元素,两者是兄弟关系
元素.after(元素)当前元素后添加一个元素,两者是兄弟关系

事件

加载方式

JavaScript页面加载完成window.onload = function() { … };
jQuery页面加载完成方式1$(document).ready( function() { … } );
jQuery页面加载完成方式2$( function() { … } ); √

页面加载完成之后会一次执行所有绑定的加载事件。


AJAX

To be continued...


JQuery对象方法

each(function(index,element){})函数中的this绑定的是DOM元素,无法使用JQuery对象的方法,因此需要转化为JQuery对象:$(this)
(这里的index和element顺序和js中数组的each方法中是相反的。)
JQuery对象常用事件(事件.([data],fn)):

事件方法功能
blur()失去焦点
change()改变事件
click()单击事件
dblclick()双击事件
focus()得到焦点
keydown()按下键
keypress()按下键(会产生字符的键)
keyup()松开键
mousedown()鼠标按下
mouseleave()鼠标移开(只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件)
mousemove()鼠标移动
mouseover()鼠标移上
mouseout()鼠标移出
submit()表单提交
hover()jq创建的事件,鼠标悬浮,相当于mouseover和mouseout

hover( over , out )简化方法
A.hover( fn1 , fn2)等效与A.mouseover( fn1 ),A.mouseout( fn2 )

事件绑定

绑定

//绑定一个事件:
$("btn").bind("click", function(){ … });
//绑定多个事件: 
$("btn").bind({
    click:function(){ … },
    mouseover:function(){ … },  
    mouseout:function(){ … }  
});

解绑

//解绑所有事件:
$("btn").unbind();
//解绑指定事件:
$("btn").unbind(“click”);或者   $("btn").unbind(“click mouseout”);

jQuery Validate

Validate表单验证插件

使用方法:

$("form表单的选择器").validate({
    // 要验证的表单项
    rules : {
        表单项name值:{
            //校验规则
            校验方式:校验规则
        },
        ... ...
    }
    例如:
    rules : {
        "username":{
            required:true,
            rangelength: [4,6] // 4-6位
            }
        },
        ... ...
    },
    //错误提示信息
    messages : {
        //提示项
        表单项name值:{
            规则:信息,
            ... ...
        },
        ... ...
    }
    例如:
    messages : {
        "username":{
            required:"用户名不能是空",
            rangelength: '长度必须是4-6位'
        }
    }
});

messages可以不填,使用引入插件本地化js文件的方式提示。(在插件下方引入)

序号规则描述
1required:true必须输入的字段。
2remote:"check.php"使用 ajax 方法调用 check.php 验证输入值。
3email:true必须输入正确格式的电子邮件。
4url:true必须输入正确格式的网址。
5date:true必须输入正确格式的日期。日期校验 ie6 出错,慎用。
6dateISO:true必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22。只验证格式,不验证有效性。
7number:true必须输入合法的数字(负数,小数)。
8digits:true必须输入整数。
9creditcard:必须输入合法的信用卡号。
10equalTo:"#field"输入值必须和 #field 相同。
11accept:输入拥有合法后缀名的字符串(上传文件的后缀)。
12maxlength:5输入长度最多是 5 的字符串(汉字算一个字符)。
13minlength:10输入长度最小是 10 的字符串(汉字算一个字符)。
14rangelength:[5,10]输入长度必须介于 5 和 10 之间的字符串(汉字算一个字符)。
15range:[5,10]输入值必须介于 5 和 10 之间。
16max:5输入值不能大于 5。
17min:10输入值不能小于 10。

添加自定义验证

$.validator.addMethod(“name” , method , message);
参数1:name,  校验规则的名称。例如:required,pwdFormat等
参数2:method,执行校验时使用的处理函数。该函数返回true表示校验通过,返回false表示校验未通过。
    function(value , element , params ){} ,处理函数被调用时,可以获得3个参数。
        参数value:   表单项的value值。例如:<input value="aaa">
        参数element:被校验的表单项对象。
        参数params: 使用当前校验规则传递的值。例如:rules : { username : {required : true} },这里params接收的就是true这个值。
参数3:message,校验未通过时的提示的信息。注意:参数可以不用写,不写可以在messages里面配置

例子:

$.validator.addMethod('cardFormat', function(value, element, params) {
    if (params) { // params:true 表示要验证
        if (value.length == 15) { 
            // 15位: 都是数字
            var reg = /^\d{15}$/;
            return reg.test(value);
        } else if (value.length == 18) {
            // 18 位: 都是数字或者末尾是X,x
            var reg = /^\d{18}|\d{17}[Xx]$/;
            return reg.test(value);
        } 
        // 格式不符合
        return false;
    }
    // 执行到这里说明params是false 表示不验证 直接通过,所以该函数返回true
    return true;
});

标签: 前端

添加新评论