MDUI 内置了一个轻量的 JavaScript 工具库,它拥有和 jQuery 类似的 api 和 jQuery 风格的链式调用,但体积仅为 jQuery 的六分之一。
你可以通过 mdui.$ 来调用该库,但最好把 mdui.$ 存储到一个简短的变量中以方便调用,例如:
11var $ = mdui.$;在后面的文档中,都使用 $ 来表示 mdui.$。
该方法有多种用法:可以传入一个 CSS 选择器作为参数,返回包含匹配元素的 JQ 对象。该方法是通过 querySelectorAll 实现的。
11$('.box')可以传入 DOM 元素、任意数组、NodeList、JQ 对象,返回包含指定元素的 JQ 对象。
11$(document)可以传入 HTML 字符串,返回包含根据 HTML 创建的 DOM 的 JQ 对象。
31$('<div id="wrapper">2 <span id="inner"></span>3</div>')可以传入一个函数,在 DOM 加载完毕后会调用该函数。
11$(function () { console.log('DOM Loaded') })如果只传入一个对象,该对象中的属性将合并到 JQ 对象中,相当于在 JQ 的命名空间下添加新的功能。
61$.extend({2 customFunc: function () {}3})4
5// 然后就可以这样调用自定义方法了6$.customFunc()如果传入了两个或更多个对象,所有对象的属性都添加到第一个对象,并返回合并后的对象。
71var object = $.extend(2 { key1: val1 },3 { key2: val2 },4 { key3: val3 }5);6
7// 此时第一个对象和返回值都是 { key1: val1, key2: val2, key3: val3 }在 JQ 的原型链上扩展方法。
61$.fn.extend({2 customFunc: function () {}3})4
5// 然后就可以这样使用扩展的方法了6$(document).customFunc()将对象或数组序列化,返回一个可用于 URL 参数的字符串。
81$.param({ width: 1680, height: 1050 })2// width=1680&height=10503
4$.param({ foo: { one: 1, two: 2 } })5// foo[one]=1&foo[two]=26
7$.param({ ids: [1, 2, 3] })8// ids[]=1&ids[]=2&ids[]=3若传入参数是一个数组,则该数组格式必须与 .serializeArray() 的返回格式一致:
51param([2 { "name": "name", "value": "mdui" },3 { "name": "password", "value": "123456" }4])5// name=mdui&password=123456遍历数组或对象。返回值为第一个参数,即被遍历的数组或对象。
函数的第一个参数为数组的索引位置、或对象的键;第二个参数为数组或对象对应位置的值。
回调函数中的 this 指向数组或对象对应位置的值。若回调函数返回 false,则停止遍历。
91// 遍历一个数组2$.each(['a', 'b', 'c'], function (index, value) {3 console.log(index + ':' + value);4})5
6// 结果:7// 0:a8// 1:b9// 2:c81// 遍历一个对象2$.each({'name': 'mdui', 'lang': 'zh'}, function (key, value) {3 console.log(key + ':' + value);4})5
6// 结果7// name:mdui8// lang:zh把第二个数组的元素追加到第一个数组中,并返回合并后的数组。
61var first = ['a', 'b', 'c'];2var second = ['c', 'd', 'e'];3var result = $.merge(first, second);4
5console.log(first); // ['a', 'b', 'c', 'c', 'd', 'e']6console.log(result); // ['a', 'b', 'c', 'c', 'd', 'e']过滤掉数组中的重复元素。
21var result = $.unique([1, 2, 12, 3, 2, 1, 2, 1, 1, 1, 1]);2console.log(result); // [1, 2, 12, 3]遍历数组或对象,返回由函数的返回值组成的新数组。
函数的第一个参数为数组或对象对应位置的值,第二个参数为数组的索引位置、或对象的键。
函数可以返回任何值,若函数返回的是数组,则会被展开;若返回的是 null 或 undefined,则会被忽略。函数内部的 this 指向 window 对象。
51// 遍历数组2var result = $.map(['a', 'b', 'c'], function (value, index) {3 return index + value;4});5console.log(result); // ['0a', '1b', '2c']51// 回调函数返回数组时,会被展开2var result = $.map([1, 2, 3], function (value, index) {3 return [value, value + 1];4});5console.log(result); // [1, 2, 2, 3, 3, 4]51// 遍历对象2var result = $.map({ name: 'mdui', password: '123456' }, function (value, key) {3 return key + ':' + value;4});5console.log(result); // ['name:mdui', 'password:123456']判断父节点是否包含子节点,返回布尔值。
21$.contains(document, document.body); // true2$.contains(document.body, document); // false如果集合中至少有一个元素和参数匹配,则返回 true,否则返回 false。
参数可以是 CSS 选择器、DOM 元素、DOM 元素数组、JQ 对象、或回调函数。
参数为回调函数时,函数的第一个参数为索引位置,第二个参数为当前元素,this 指向当前元素。若函数返回 true,表示匹配;若返回 false,表示不匹配。
81$('.box').is('.box'); // true2$('.box').is('.boxss'); // false3$('.box').is($('.box')[0]); // true4// 通过回调函数的返回值做判断5$(document).is(function (index, element) {6 return element === document;7});8// true返回当前集合中元素的数量。
11$('body').length; // 1遍历当前集合,为集合中每一个元素执行一个函数。如果函数返回 false,则结束遍历。
函数的第一个参数为元素的索引位置,第二个参数为当前元素。函数中的 this 指向当前元素。
31$('img').each(function(index, element) {2 this.src = 'test' + index + '.jpg';3});遍历当前集合,为集合中的每个元素执行一个函数,返回由函数返回值组成的新集合。若函数返回 null 或 undefined 则会被过滤。
函数的第一个参数为元素的索引位置,第二个参数为当前元素。函数的 this 指向当前元素。
51var result = $('input.checked').map(function (index, element) {2 return $(this).val();3});4
5// result 为匹配元素的值组成的 JQ 对象返回仅包含指定索引位置的元素的集合。
31$('div').eq(0); // 返回仅包含第一个元素的 JQ 对象2$('div').eq(-1); // 返回仅包含最后一个元素的 JQ 对象3$('div').eq(-2); // 返回仅包含倒数第二个元素的 JQ 对象返回仅包含第一个元素的集合。
11$('div').first(); // 返回仅包含第一个 div 的 JQ 对象返回仅包含最后一个元素的集合。
11$('div').last(); // 返回仅包含最后一个 div 的 JQ 对象返回指定索引位置的元素。若未传入参数,则返回集合中所有元素组成的数组。
31$('div').get(); // 返回所有 div 元素组成的数组2$('div').get(0); // 返回第一个 div 元素3$('div').get(-1); // 返回最后一个 div 元素如果没有传入参数,则返回集合中第一个元素相对于同辈元素的索引位置。
如果传入了一个 CSS 选择器作为参数,则返回集合中第一个元素相对与 CSS 选择器匹配元素的索引位置。
如果传入了一个 DOM 元素,则返回该 DOM 元素在集合中的索引值。
如果传入一个 JQ 对象,则返回对象中第一个元素在当前集合中的索引位置。
61<div id="child">2 <div id="child1"></div>3 <div id="child2"></div>4 <div id="child3"></div>5 <div id="child4"></div>6</div>31$('#child3').index(); // 22$('#child3').index('#child div'); // 23$('#child div').index($('#child3').get(0); // 2返回当前集合的子集。
第一个参数为子集的起始位置,第二个参数为子集的结束位置;若未传入第二个参数,表示包含从起始位置到结尾的所有元素。
51// 返回集合中第三个(包含第三个)之后的所有元素2$('div').slice(3);3
4// 返回集合中第三个到第五个(包含第三个,不包含第五个)之间的元素5$('div').slice(3, 5);从当前集合中筛选出与指定表达式匹配的元素。参数可以是 CSS 选择器、DOM 元素、DOM 元素数组、回调函数。
参数为函数时,函数的第一个参数为索引位置,第二个参数为当前元素,函数中的 this 指向当前元素。函数返回 true 时,当前元素会被保留,返回 false 时,当前元素会被移除。
71// 筛选出所有含 .box 的 div 元素2$('div').filter('.box');3
4// 筛选出所有已选中选项5$('#select option').filter(function (index, element) {6 return element.selected;7});从当前集合中筛选出与指定表达式不匹配的元素。参数可以是 CSS 选择器、DOM 元素、DOM 元素数组、回调函数。
参数为函数时,函数的第一个参数为索引位置,第二个参数为当前元素,函数中的 this 指向当前元素。函数返回 true 时,当前元素会被移除,返回 false 时,当前元素会被保留。
71// 筛选出所有不含 .box 类的 div 元素2$('div').not('.box');3
4// 筛选出所有未选中选项5$('#select option').not(function (index, element) {6 return element.selected;7});判断集合中的第一个元素是否含有指定 CSS 类。
21// 判断第一个 div 元素是否含有 .item2$('div').hasClass('item')为集合中的每个元素添加 CSS 类,多个类名之间可以用空格分隔。
也可以传入一个返回 CSS 类名的回调函数。函数的第一个参数为索引位置,第二个参数为该元素上原有的 CSS 类名,函数中的 this 指向当前元素。
21// 为所有 div 元素添加 .item2$('div').addClass('item')21// 为所有 div 元素添加 .item1 和 .item22$('div').addClass('item1 item2')41// 为所有 div 元素添加由回调函数返回的 CSS 类2$('div').addClass(function (index, currentClassName) {3 return currentClassName + '-' + index;4})移除集合中的元素上的 CSS 类,多个类名之间可以用空格分隔。
也可以传入一个返回 CSS 类名的回调函数。函数的第一个参数为索引位置,第二个参数为该元素上原有的 CSS 类名,函数中的 this 指向当前元素。
若没有传入参数,则将直接移除元素上的 class 属性。
21// 移除所有 div 元素上的 .item2$('div').removeClass('item')21// 移除所有 div 元素上的 .item1 和 .item22$('div').removeClass('item1 item2')41// 移除所有 div 元素上的由回调函数返回的 CSS 类2$('div').removeClass(function (index, currentClassName) {3 return 'item';4})21// 直接移除 class 属性2$('div').removeClass()元素上的 CSS 类,有则删除,无则添加。多个类名之间可以用空格分隔。
也可以传入一个返回 CSS 类名的回调函数。函数的第一个参数为索引位置,第二个参数为该元素上原有的 CSS 类名,函数中的 this 指向当前元素。
21// 切换所有 div 元素上的 .item2$('div').toggleClass('item')21// 切换所有 div 元素上的 .item1 和 .item22$('div').toggleClass('item1 item2')41// 切换所有 div 元素上的由回调函数返回的 CSS 类2$('div').toggleClass(function (index, currentClassName) {3 return 'item';4})获取集合中第一个元素的属性值。
21// 获取第一个元素的属性值2$('input').prop('checked');也可以是设置集合中所有元素的属性值。
设置的属性值可以是回调函数的返回值。回调函数的第一个参数为元素的索引位置,第二个参数为该元素上原有的属性值,函数内的 this 指向当前元素。
若属性值或回调函数的返回值为 void 或 undefined,则不会修改原有属性。
也可以通过传入对象来同时设置多个属性。
151// 设置所有选中元素的属性值2$('input').prop('checked', true);3
4// 通过回调函数的返回值设置属性值5$('input').prop('checked', function (index, oldPropValue) {6 return true;7});8
9// 同时设置元素的多个属性值10$('input').prop({11 checked: false,12 disabled: function (index, oldPropValue) {13 return true;14 }15});删除集合中所有元素上指定的属性值。
11$('input').removeProp('disabled');获取集合中第一个元素的属性值。
21// 获取第一个元素的属性值2$('div').attr('username');也可以是设置集合中所有元素的属性值。
设置的属性值可以是回调函数的返回值。回调函数的第一个参数为元素的索引位置,第二个参数为该元素上原有的属性值,函数内的 this 指向当前元素。
若属性值或回调函数的返回值为 void 或 undefined,则不会修改原有属性。若属性值或回调函数的返回值为 null,则删除指定属性。
也可以通过传入对象来同时设置多个属性。
151// 设置所有选中元素的属性值2$('div').attr('username', 'mdui');3
4// 通过回调函数的返回值设置属性值5$('div').attr('username', function (index, oldAttrValue) {6 return 'mdui';7});8
9// 同时设置元素的多个属性值10$('div').attr({11 username: 'mdui',12 lastname: function (index, oldAttrValue) {13 return 'test';14 }15});删除集合中所有元素上指定的属性值,多个属性名之间可以用空格分隔。
51// 删除集合中所有元素上的一个属性2$('div').removeAttr('username');3
4// 删除集合中所有元素上的多个属性5$('div').removeAttr('username lastname');获取集合中第一个元素的值。
若元素是 <select multiple="multiple">,则将返回一个包含每个选择项的数组。
21// 获取选中的第一个元素的值2$('#input').val();也可以是设置集合中所有元素的值。
设置的值可以是字符串、数值、字符串数组、回调函数。
若值为回调函数,第一个参数为元素的索引位置,第二个参数为元素的原有的值,函数中的 this 指向当前元素。
若元素为 <input type="checkbox">、<input type="radio">、<option>,则元素值、或函数返回值可以为数组,此时将选中值在数组中的元素,并取消值不在数组中的元素。
若值、或函数返回值为 undefined,则会将元素值设为空。
71// 设置选中元素的值2$('#input').val('input value');3
4// 通过回调函数的返回值设置元素值5$('#input').val(function (index, oldValue) {6 return 'new value';7});获取集合中所有元素的文本内容(包含它们的后代元素)
21// 获取所有 .box 元素的文本2$('.box').text();也可以是设置集合中所有元素的文本。
设置的值可以是字符串、数值、布尔值、回调函数。
若为回调函数,第一个参数为元素的索引位置,第二个参数为元素原有的文本内容,函数内的 this 指向当前元素。
若设置的值、或回调函数返回值为 undefined,则不修改对应元素的文本。
71// 设置选中元素的文本内容2$('.box').text('text content');3
4// 通过回调函数的返回值设置元素的文本内容5$('.box').text(function (index, oldTextContent) {6 return 'new text content';7});获取集合中第一个元素的 HTML 内容。
21// 获取第一个 .box 元素的 HTML 内容2$('.box').html();也可以是设置集合中所有元素的 HTML 内容。
设置的值可以是 HTML 字符串、DOM 元素、回调函数。
若为回调函数,第一个参数为元素的索引位置,第二个参数为元素原有的 HTML 内容,函数内的 this 指向当前元素。
如设置的值、或函数返回值为 undefined,则不修改对应元素的 HTML。
71// 设置选中元素的 HTML2$('.box').html('<div>new html content</div>');3
4// 通过回调函数的返回值设置元素的 HTML 内容5$('.box').html(function (index, oldHTMLContent) {6 return '<div>new html content</div>';7});在指定元素上读取或存储数据。
存储数据时,若值为 undefined,则相当于读取元素上对应的数据。即 $.data(element, 'key', undefined) 和 $.data(element, 'key') 等效。
注意:该方法不会检索元素上的 data-* 属性。
141// 在指定元素上存储数据,返回存储的值2$.data(document.body, 'layout', 'dark'); // 返回 dark3
4// 在指定元素上同时存储多个数据5$.data(document.body, {6 primary: 'indigo',7 accent: 'pink',8});9
10// 获取在指定元素上存储的数据11$.data(document.body, 'layout'); // 返回 dark12
13// 获取在指定元素上存储的所有数据14$.data(document.body); // 返回 { layout: 'dark', primary: 'indigo', accent: 'pink' }移除指定元素上存储的数据。
多个键名可以用空格分隔,也可以用数组表示多个键名。未指定键名时,将移除元素上的所有数据。
91// 移除元素上键名为 name 的数据2$.removeData(document.body, 'name');3
4// 移除元素上键名为 name1 和 name2 的数据。下面两种方法等效:5$.removeData(document.body, 'name1 name2');6$.removeData(document.body, ['name1', 'name2']);7
8// 移除元素上存储的所有数据9$.removeData(document.body);在当前集合的元素上读取或存储数据。
存储数据时,若值为 undefined,则不进行存储。
注意:该方法检索的数据会包含元素上的 data-* 属性。
141// 在当前集合中的元素上存储数据2$('.box').data('layout', 'dark');3
4// 在当前集合中的元素上同时存储多个数据5$('.box').data({6 primary: 'indigo',7 accent: 'pink',8});9
10// 获取当前集合中第一个元素上存储的指定数据11$('.box').data('layout'); // 返回 dark12
13// 获取在当前集合中第一个元素上存储的所有数据14$('.box').data(); // 返回 { layout: 'dark', primary: 'indigo', accent: 'pink' }移除当前集合的元素上存储的数据。
多个键名可以用空格分隔,也可以用数组表示多个键名。未指定键名时,将移除元素上的所有数据。
注意:该方法只会移除通过 .data() 方法设置的数据,不会移除 data-* 属性上的数据。
91// 移除键名为 name 的数据2$('.box').removeData('name');3
4// 移除键名为 name1 和 name2 的数据。下面两种方法等效:5$('.box').removeData('name1 name2');6$('.box').removeData(['name1', 'name2']);7
8// 移除元素上存储的所有数据9$('.box').removeData();获取集合中第一个元素的 CSS 属性值。
11$('.box').css('color')也可以设置集合中所有元素的 CSS 属性值。
属性值可以是字符串、数值、或一个返回字符串或数值的回调函数。
若属性值是回调函数,第一个参数为元素的索引位置,第二个参数为元素原有的 CSS 属性值,函数中的 this 指向当前元素。
若属性值或回调函数返回 void、undefined、null,则不对当前元素的 CSS 属性值进行修改。
若属性值或回调函数返回数值,则会添加 px 作为单位。若该属性无法使用 px 作为单位,则会直接把该值转为字符串。
也可以通过传入一个键值对对象,来同时设置多个 CSS 属性。
151// 设置集合中所有元素的样式值2$('.box').css('color', 'red')3
4// 通过回调函数的返回值设置所有元素的样式值5$('.box').css('color', function (index, oldCSSValue) {6 return 'green';7});8
9// 通过传入一个对象同时设置多个样式10$('.box').css({11 'background-color': 'white',12 color: function (index, oldCSSValue) {13 return 'blue';14 },15});获取集合中第一个元素的宽度(像素值),不包含 padding、border、margin 的宽度。
11$('.box').width();也可以设置集合中所有元素的宽度(不包含 padding、border、margin 的宽度)。
值可以是带单位的字符串、数值、或返回带单位的字符串或数值的回调函数。
回调函数的第一个参数为元素的索引位置,第二个参数为元素原有的宽度值,函数中的 this 指向当前元素。
若值、或回调函数的返回值为数值,则会自动添加 px 作为单位。
若值、或回调函数的返回值为 null 或 undefined,则不修改元素的宽度。
101// 设置集合中所有元素的宽度2$('.box').width('20%');3
4// 值为数值时,默认单位为 px5$('.box').width(10);6
7// 通过回调函数的返回值设置宽度8$('.box').width(function (index, oldWidth) {9 return 10;10});获取集合中第一个元素的高度(像素值),不包含 padding、border、margin 的高度。
11$('.box').height();也可以设置集合中所有元素的高度(不包含 padding、border、margin 的高度)。
值可以是带单位的字符串、数值、或返回带单位的字符串或数值的回调函数。
回调函数的第一个参数为元素的索引位置,第二个参数为元素原有的高度值,函数中的 this 指向当前元素。
若值、或回调函数的返回值为数值,则会自动添加 px 作为单位。
若值、或回调函数的返回值为 null 或 undefined,在不修改元素的高度。
101// 设置集合中所有元素的高度2$('.box').height('20%');3
4// 值为数值时,默认单位为 px5$('.box').height(10);6
7// 通过回调函数的返回值设置高度8$('.box').height(function (index, oldWidth) {9 return 10;10});获取集合中第一个元素的宽度(像素值),包含 padding,不包含 border、margin 的宽度。
11$('.box').innerWidth();也可以设置集合中所有元素的宽度(包含 padding,不包含 border、margin 的宽度)。
值可以是带单位的字符串、数值、或返回带单位的字符串或数值的回调函数。
回调函数的第一个参数为元素的索引位置,第二个参数为元素原有的宽度值,函数中的 this 指向当前元素。
若值、或回调函数的返回值为数值,则会自动添加 px 作为单位。
若值、或回调函数的返回值为 null 或 undefined,则不修改元素的宽度。
101// 设置集合中所有元素的宽度2$('.box').innerWidth('20%');3
4// 值为数值时,默认单位为 px5$('.box').innerWidth(10);6
7// 通过回调函数的返回值设置宽度8$('.box').innerWidth(function (index, oldWidth) {9 return 10;10});获取集合中第一个元素的高度(像素值),包含 padding,不包含 border、margin 的高度。
11$('.box').innerHeight();也可以设置集合中所有元素的高度(包含 padding,不包含 border、margin 的高度)。
值可以是带单位的字符串、数值、或返回带单位的字符串或数值的回调函数。
回调函数的第一个参数为元素的索引位置,第二个参数为元素原有的高度值,函数中的 this 指向当前元素。
若值、或回调函数的返回值为数值,则会自动添加 px 作为单位。
若值、或回调函数的返回值为 null 或 undefined,在不修改元素的高度。
101// 设置集合中所有元素的高度2$('.box').innerHeight('20%');3
4// 值为数值时,默认单位为 px5$('.box').innerHeight(10);6
7// 通过回调函数的返回值设置高度8$('.box').innerHeight(function (index, oldHeight) {9 return 10;10});获取集合中第一个元素的宽度(像素值),包含 padding、border的宽度,不包含 margin 的宽度,可以传入参数 true,使宽度包含 margin 的宽度。
51// 包含 padding、border 的宽度2$('.box').outerWidth();3
4// 包含 padding、border、margin 的宽度5$('.box').outerWidth(true);也可以设置集合中所有元素的宽度(包含 padding、border,不包含 margin 的宽度,可以在第二个参数中传入 true,使宽度包含 margin 的宽度)。
第一个参数可以是带单位的字符串、数值、或返回带单位的字符串或数值的回调函数。
回调函数的第一个参数为元素的索引位置,第二个参数为元素的原有宽度,函数中的 this 指向当前元素。
若值、或回调函数的返回值为数值,则会自动添加 px 作为单位。
若值、或回调函数的返回值为 null 或 undefined,则不修改元素的宽度。
131// 设置集合中所有元素的宽度2$('.box').outerWidth('20%');3
4// 值为数值时,默认单位为 px5$('.box').outerWidth(10);6
7// 第二个参数为 true,则宽度将包含 margin8$('.box').outerWidth(10, true);9
10// 通过回调函数的返回值设置宽度11$('.box').outerWidth(function (index, oldWidth) {12 return 10;13});获取集合中第一个元素的高度(像素值),包含 padding、border的高度,不包含 margin 的高度,可以传入参数 true,使高度包含 margin 的高度。
51// 包含 padding、border 的高度2$('.box').outerHeight();3
4// 包含 padding、border、margin 的高度5$('.box').outerHeight(true);也可以设置集合中所有元素的高度(包含 padding、border,不包含 margin 的高度,可以在第二个参数中传入 true,使高度包含 margin 的高度)。
第一个参数可以是带单位的字符串、数值、或返回带单位的字符串或数值的回调函数。
回调函数的第一个参数为元素的索引位置,第二个参数为元素的原有高度,函数中的 this 指向当前元素。
若值、或回调函数的返回值为数值,则会自动添加 px 作为单位。
若值、或回调函数的返回值为 null 或 undefined,则不修改元素的高度。
131// 设置集合中所有元素的高度2$('.box').outerHeight('20%');3
4// 值为数值时,默认单位为 px5$('.box').outerHeight(10);6
7// 第二个参数为 true,则高度将包含 margin8$('.box').outerHeight(10, true);9
10// 通过回调函数的返回值设置高度11$('.box').outerHeight(function (index, oldWidth) {12 return 10;13});隐藏集合中的所有元素。
11$('.box').hide();显示集合中的所有元素。
11$('.box').show();切换集合中所有元素的显示状态。
11$('.box').toggle();获取集合中第一个元素相对于 document 的坐标。
11$('.box').offset(); // { top: 20, left: 30 }也可以设置集合中所有元素相对于 document 的坐标。
参数为一个包含 top 和 left 属性的对象,或一个返回此格式对象的回调函数。
若参数是回调函数,第一个参数为元素的索引位置,第二个参数为元素的原有坐标,函数中的 this 指向当前元素。
若参数中 top 或 left 的值为 undefined,则不修改对应的值。
71// 设置集合中所有元素的坐标2$('.box').offset({ top: 20, left: 30 });3
4// 通过回调函数的返回值设置元素的坐标5$('.box').offset(function (index, oldOffset) {6 return { top: 20, left: 30 };7});返回集合中第一个元素的用于定位的父元素。即父元素中第一个 position 为 relative 或 absolute 的元素。
11$('.box').offsetParent();获取集合中第一个元素相对于父元素的偏移。
11$('.box').position(); // { top: 20, left: 30 }在当前集合的所有元素中,根据 CSS 选择器找到指定的后代节点的集合。
21// 找到 #box 的后代节点中,包含 .box 的节点集合2$('#box').find('.box')在当前集合的所有元素中,获取直接子元素组成的集合。
可以传入一个 CSS 选择器作为参数,对子元素进行过滤。
51// 找到 #box 的所有直接子元素2$('#box').children();3
4// 找到 #box 的所有直接子元素中,包含 .box 的元素集合5$('#box').children('.box')在当前集合的所有元素中,筛选出含有指定子元素的元素。
参数可以是 CSS 选择器或 DOM 元素。
21// 给含有 ul 的 li 加上背景色2$('li').has('ul').css('background-color', 'red');获取当前集合中,所有元素的直接父元素的集合。
可以传入一个 CSS 选择器作为参数,仅返回与该参数匹配的父元素的集合。
51// 返回 .box 元素的直接父元素2$('.box').parent();3
4// 返回 .box 元素的直接父元素中含有 .parent 类的元素5$('.box').parent('.parent');获取当前集合中,所有元素的祖先元素的集合。
可以传入一个 CSS 选择器作为参数,仅返回与该参数匹配的祖先元素的集合。
51// 返回 span 元素的所有祖先元素2$('span').parents();3
4// 返回 span 元素的所有是 p 元素的祖先元素5$('span').parents('p');获取当前集合中,每个元素的所有父辈元素,直到遇到和第一个参数匹配的元素为止(不包含匹配元素)。
第一个参数可以是 CSS 选择器、DOM 元素、JQ 对象。
可以传入第二个参数,必须是 CSS 选择器,表示仅返回和该参数匹配的元素。
若没有指定参数,则所有的祖先元素都将被匹配,即和 .parents() 效果一样。
81// 获取 .item 元素的所有祖先元素2$('.item').parentsUntil();3
4// 查找 .item 元素的所有父辈元素,直到遇到 .parent 元素为止5$('.item').parentsUntil('.parent');6
7// 获取 .item 元素的所有是 div 元素的祖先元素,直到遇到 .parent 元素为止8$('.item').parentsUntil('.parent', 'div');获取当前集合中所有元素的前一个同辈元素组成的集合。
可以传入一个 CSS 选择器作为参数,仅获取和该参数匹配的同辈元素的集合。
51// 获取 .box 元素的前一个元素的集合2$('.box').prev();3
4// 获取 .box 元素的前一个 div 元素的集合5$('.box').prev('div');获取当前集合中所有元素的前面的所有同辈元素组成的集合。
可以传入一个 CSS 选择器作为参数,仅获取和该参数匹配的同辈元素的集合。
51// 获取 .box 元素前面的所有同辈元素2$('.box').prevAll();3
4// 获取 .box 元素前面的所有含 .selected 的同辈元素5$('.box').prevAll('.selected');获取当前集合中,每个元素前面所有的同辈元素,直到遇到和第一个参数匹配的元素为止(不包含匹配元素)。
第一个参数可以是 CSS 选择器、DOM 元素、JQ 对象。
可以传入第二个参数,必须是 CSS 选择器,表示仅返回和该参数匹配的元素。
81// 获取 .box 元素前面所有的同辈元素2$('.box').prevUntil();3
4// 获取 .box 元素前所有的同辈元素,直到遇到 .until 元素为止5$('.box').prevUntil('.until');6
7// 获取 .box 元素前面同辈的 div 元素,直到遇到 .until 元素为止8$('.box').prevUntil('.until', 'div');获取当前集合中所有元素的后一个同辈元素组成的集合。
可以传入一个 CSS 选择器作为参数,仅获取和该参数匹配的同辈元素的集合。
51// 获取 .box 元素的后一个元素的集合2$('.box').next();3
4// 获取 .box 元素的后一个 div 元素的集合5$('.box').next('div');获取当前集合中所有元素的后面的所有同辈元素组成的集合。
可以传入一个 CSS 选择器作为参数,仅获取和该参数匹配的同辈元素的集合。
51// 获取 .box 元素后面的所有同辈元素2$('.box').nextAll();3
4// 获取 .box 元素后面的所有含 .selected 的同辈元素5$('.box').nextAll('.selected');获取当前集合中,每个元素后面所有的同辈元素,直到遇到和第一个参数匹配的元素为止(不包含匹配元素)。
第一个参数可以是 CSS 选择器、DOM 元素、JQ 对象。
可以传入第二个参数,必须是 CSS 选择器,表示仅返回和该参数匹配的元素。
81// 获取 .box 元素后面所有的同辈元素2$('.box').nextUntil();3
4// 获取 .box 元素后所有的同辈元素,直到遇到 .until 元素为止5$('.box').nextUntil('.until');6
7// 获取 .box 元素后面同辈的 div 元素,直到遇到 .until 元素为止8$('.box').nextUntil('.until', 'div');从当前元素向上逐级匹配,返回最先匹配到的元素。
参数可以是 CSS 选择器、DOM 元素、JQ 对象。
21// 获取 .box 元素的父元素中最近的 .parent 元素2$('.box').closest('.parent');获取当前集合中,每个元素的兄弟元素。
可以传入一个 CSS 选择器作为参数,仅获取和该参数匹配的兄弟元素。
51// 获取 .box 元素的所有兄弟元素2$('.box').siblings();3
4// 获取 .box 元素的所有兄弟元素中含 .selected 的元素5$('.box').siblings('.selected');添加元素到当前集合中。
参数可以是 HTML 字符串、CSS 选择器、JQ 对象、DOM 元素、DOM 元素数组、NodeList。
21// 把含 .selected 的元素添加到当前集合中中2$('.box').add('.selected');移除当前元素中所有的子元素。
11$('.box').empty();从 DOM 中移除当前集合中的元素。
可以传入一个 CSS 选择器作为参数,仅移除与该参数匹配的元素。
51// 移除所有 p 元素2$('p').remove();3
4// 移除所有含 .box 的 p 元素5$('p').remove('.box');在当前集合的元素内部的前面插入指定内容。
参数类型可以是 HTML 字符串、DOM 元素、DOM 元素数组、JQ 对象。支持传入多个参数。
也可以传入一个返回 HTML 字符串、DOM 元素、DOM 元素数组、JQ 对象的回调函数,函数的第一个参数是当前元素的索引位置,第二个参数是元素的原始 HTML,函数中的 this 指向当前元素。
该方法返回原始集合。
131// 插入一个元素2$('<p>I would like to say: </p>').prepend('<b>Hello</b>');3// 结果:<p><b>Hello</b>I would like to say: </p>4
5// 插入多个元素6$('<p>I would like to say: </p>').prepend('<b>Hello</b>', '<b>World</b>');7// 结果:<p><b>Hello</b><b>World</b>I would like to say: </p>8
9// 通过回调函数插入一个元素10$('<p>Hello</p>').append(function (index, oldHTML) {11 return '<b>' + oldHTML + index + '</b>';12});13// 结果:<p><b>Hello0</b>Hello</p>把当前集合中的元素追加到指定元素内部的前面。
参数可以是 CSS 选择器、HTML 字符串、DOM 元素、DOM 元素数组、JQ 对象。
该方法返回原始集合。
31$('<p>Hello</p>').prependTo('<p>I would like to say: </p>');2
3// 结果:[ <p><p>Hello</p>I would like to say: </p> ]在当前集合的元素内部的后面插入指定内容。
参数类型可以是 HTML 字符串、DOM 元素、DOM 元素数组、JQ 对象。支持传入多个参数。
也可以传入一个返回 HTML 字符串、DOM 元素、DOM 元素数组、JQ 对象的回调函数,函数的第一个参数是当前元素的索引位置,第二个参数是元素的原始 HTML,函数中的 this 指向当前元素。
该方法返回原始集合。
131// 插入一个元素2$('<p>I would like to say: </p>').append('<b>Hello</b>');3// 结果:<p>I would like to say: <b>Hello</b></p>4
5// 插入多个元素6$('<p>I would like to say: </p>').append('<b>Hello</b>', '<b>World</b>');7// 结果:<p>I would like to say: <b>Hello</b><b>World</b></p>8
9// 通过回调函数插入一个元素10$('<p>Hello</p>').append(function (index, oldHTML) {11 return '<b>' + oldHTML + index + '</b>';12});13// 结果:<p>Hello<b>Hello0</b></p>把当前集合中的元素追加到指定元素内部的后面。
参数可以是 CSS 选择器、HTML 字符串、DOM 元素、DOM 元素数组、JQ 对象。
该方法返回原始集合。
21$('<p>Hello</p>').appendTo('<p>I would like to say: </p>')2// 结果:<p>I would like to say: <p>Hello</p></p>在当前集合的元素后面插入指定内容,作为其兄弟节点。
参数类型可以是 HTML 字符串、DOM 元素、DOM 元素数组、JQ 对象。支持传入多个参数。
也可以传入一个返回 HTML 字符串、DOM 元素、DOM 元素数组、JQ 对象的回调函数,函数的第一个参数为当前元素的索引位置,第二个参数为元素的原始 HTML,函数中的 this 指向当前元素。
该方法返回原始集合。
131// 插入一个元素2$('<p>I would like to say: </p>').after('<b>Hello</b>')3// 结果:<p>I would like to say: </p><b>Hello</b>4
5// 插入多个元素6$('<p>I would like to say: </p>').after('<b>Hello</b>', '<b>World</b>')7// 结果:<p>I would like to say: </p><b>Hello</b><b>World</b>8
9// 通过回调函数插入一个元素10$('<p>Hello</p>').after(function (index, oldHTML) {11 return '<b>' + oldHTML + index + '</b>';12});13// 结果:<p>Hello</p><b>Hello0</b>把当前集合中的元素插入到目标元素的后面,作为其兄弟元素。
如果当前集合中的元素是页面中已有的元素,则将移动该元素,而不是复制。如果有多个目标,则将克隆当前集合中的元素,并添加到每个目标元素的后面。
可以传入一个 HTML 字符串、CSS 选择器、DOM 元素、DOM 元素数组、JQ 对象作为参数,来指定目标元素。
21$('<b>Hello</b>').insertAfter('<p>I would like to say: </p>');2// 结果:<p>I would like to say: </p><b>Hello</b>在当前集合的元素前面插入指定内容,作为其兄弟节点。
参数类型可以是 HTML 字符串、DOM 元素、DOM 元素数组、JQ 对象。支持传入多个参数。
也可以传入一个返回 HTML 字符串、DOM 元素、DOM 元素数组、JQ 对象的回调函数,函数的第一个参数为当前元素的索引位置,第二个参数为元素的原始 HTML,函数中的 this 指向当前元素。
该方法返回原始集合。
131// 插入一个元素2$('<p>I would like to say: </p>').before('<b>Hello</b>')3// 结果:<b>Hello</b><p>I would like to say: </p>4
5// 插入多个元素6$('<p>I would like to say: </p>').before('<b>Hello</b>', '<b>World</b>')7// 结果:<b>Hello</b><b>World</b><p>I would like to say: </p>8
9// 通过回调函数插入一个元素10$('<p>Hello</p>').before(function (index, oldHTML) {11 return '<b>' + oldHTML + index + '</b>';12});13// 结果:<b>Hello0</b><p>Hello</p>把当前集合中的元素插入到目标元素的前面,作为其兄弟元素。
如果当前集合中的元素是页面中已有的元素,则将移动该元素,而不是复制。如果有多个目标,则将克隆当前集合中的元素,并添加到每个目标元素的后面。
可以传入一个 HTML 字符串、CSS 选择器、DOM 元素、DOM 元素数组、JQ 对象作为参数,来指定目标元素。
21$('<p>I would like to say: </p>').insertBefore('<b>Hello</b>');2// 结果:<p>I would like to say: </p><b>Hello</b>用指定元素来替换当前集合中的元素。
参数可以是 HTML 字符串、DOM 元素、DOM 元素数组、JQ 对象。
也可以传入一个返回 HTML 字符串、DOM 元素、DOM元素数组、JQ 对象的回调函数,函数的第一个参数为当前元素的索引位置,第二个参数为元素的原始 HTML,函数中的 this 指向当前元素。
该方法返回原始集合,即被替换掉的集合。
71// 用 <p>Hello</p> 替换所有的 .box 元素2$('.box').replaceWith('<p>Hello</p>');3
4// 用回调函数的返回值替换所有 .box 元素5$('.box').replaceWith(function (index, oldHTML) {6 return oldHTML + index;7});用当前集合中的元素替换指定元素。
参数为 CSS 选择器、DOM 元素、DOM 元素数组、JQ 对象。
该方法返回原始集合,即用于替换的元素的集合。
21// 用 .new 元素替换所有 .box 元素2$('.new').replaceAll('.box');通过深度克隆来复制集合中的所有元素。
通过原生 cloneNode 方法深度克隆来复制集合中的所有元素。此方法不会有数据和事件处理程序复制到新的元素。这点和 jQuery 中利用一个参数来确定是否复制数据和事件处理不相同。
11$('body').append($("#box").clone())把表单元素的值组合成由 name 和 value 的键值对组成的数组。
该方法可对单独表单元素进行操作,也可以对整个 <form> 表单进行操作
61$('form').serializeArray();2// [3// { "name": "golang", "value":"456" },4// { "name": "name", "value": "mdui" },5// { "name": "password", "value": "" }6// ]将表单元素的值序列化。
21$('form').serialize();2// golang=456&name=mdui&password=为集合中每个元素的特定事件绑定事件处理函数。具体用法见下方示例:
801// 绑定点击事件2$('.box').on('click', function (e) {3 console.log('点击了 .box 元素');4});5
6// 绑定多个事件7$('.box').on('click focus', function (e) {8 console.log('click 和 focus 事件都会触发该函数');9});10
11// 事件委托12$(document).on('click', '.box', function (e) {13 console.log('点击 .box 时会触发该函数');14});15
16// 同时绑定多个事件和事件处理函数17$('.box').on({18 'click': function (e) {19 console.log('触发了 click 事件');20 },21 'focus': function (e) {22 console.log('触发了 focus 事件');23 }24});25
26// 传入参数27$('.box').on('click', { key1: 'value1', key2: 'value2' }, function (e) {28 console.log('点击了 .box 元素,并为事件处理函数传入了参数');29 // e._data 为 {key1: 'value1', key2: 'value2'}30});31
32// 同时绑定多个事件和事件处理函数,并传入参数33$('.box').on({34 'click': function (e) {35 console.log('触发了 click 事件');36 // e._data 为 {key1: 'value1', key2: 'value2'}37 },38 'focus': function (e) {39 console.log('触发了 focus 事件');40 // e._data 为 {key1: 'value1', key2: 'value2'}41 }42}, { key1: 'value1', key2: 'value2' });43
44// 通过事件委托绑定事件,并传入参数45$(document).on('click', '.box', { key1: 'value1', keys: 'value2' }, function (e) {46 console.log('点击了 .box 元素,并为事件处理函数传入了参数');47 // e._data 为 {key1: 'value1', key2: 'value2'}48});49
50// 通过事件委托同时绑定多个事件和事件处理函数51$(document).on({52 'click': function (e) {53 console.log('触发了 click 事件');54 },55 'focus': function (e) {56 console.log('触发了 focus 事件');57 }58}, '.box');59
60// 通过事件委托同时绑定多个事件和事件处理函数,并传入参数61$(document).on({62 'click': function (e) {63 console.log('触发了 click 事件');64 // e._data 为 {key1: 'value1', key2: 'value2'}65 },66 'focus': function (e) {67 console.log('触发了 focus 事件');68 // e._data 为 {key1: 'value1', key2: 'value2'}69 }70}, '.box', { key1: 'value1', key2: 'value2' });71
72// 获取事件参数73$('.box').on('click', function (e, data) {74 // data 等于 e._detail75});76
77// 事件名支持使用命名空间78$('.box').on('click.myPlugin', function () {79 console.log('点击了 .box 元素');80});为每个匹配元素的特定事件绑定事件处理函数。但事件只会触发一次。
该方法的用法和 .on() 相同,所以不再举例了。
为集合中每个元素解除绑定的事件。具体用法见下方示例:
321// 解除所有绑定的事件处理函数2$('.box').off();3
4// 解除绑定的指定事件5$('.box').off('click');6
7// 同时解除多个绑定的事件8$('.box').off('click focus');9
10// 解除绑定的指定事件处理函数11$('.box').off('click', callback);12
13// 解除通过事件委托绑定的事件14$(document).off('click', '.box');15
16// 解除通过事件委托绑定的指定事件处理函数17$(document).off('click', '.box', callback);18
19// 同时解绑多个事件处理函数20$('.box.').off({21 'click': callback1,22 'focus': callback2,23});24
25// 同时解绑多个通过事件委托绑定的事件处理函数26$(document).off({27 'click': callback1,28 'focus': callback2,29}, '.box');30
31// 事件名支持使用命名空间,下面的用法将解绑所有以 .myPlugin 结尾的事件32$(document).off('.myPlugin');触发指定的事件。具体用法见下方示例:
51// 触发指定的事件2$('.box').trigger('click');3
4// 触发事件时传入参数5$('.box').trigger('click', { key1: 'value1', key2: 'value2' });为 Ajax 请求设置全局配置参数。
71$.ajaxSetup({2 // 默认禁止触发全局 AJAX 事件3 global: false,4
5 // 默认使用 POST 请求6 method: 'POST'7});详细参数列表见下方的 AJAX 参数。
发送 AJAX 请求,返回 Promise。
111$.ajax({2 method: 'POST',3 url: './test.php',4 data: {5 key1: 'val1',6 key2: 'val2'7 },8 success: function (data) {9 console.log(data);10 }11});详细参数列表见下方的 AJAX 参数。
全局 AJAX 事件。
AJAX 请求开始时执行函数。
41$(document).ajaxStart(function (event, xhr, options) {2 // xhr: XMLHttpRequest 对象3 // options: AJAX 请求的配置参数4});全局 AJAX 事件。
AJAX 请求成功时执行函数。
51$(document).ajaxSuccess(function (event, xhr, options, data) {2 // xhr: XMLHttpRequest 对象3 // options: AJAX 请求的配置参数4 // data: AJAX 请求返回的数据5});全局 AJAX 事件。
AJAX 请求发生错误时执行函数。
41$(document).ajaxError(function (event, xhr, options) {2 // xhr: XMLHttpRequest 对象3 // options: AJAX 请求的配置参数4});全局 AJAX 事件。
AJAX 请求完成时执行函数。
41$(document).ajaxComplete(function (event, xhr, options) {2 // xhr: XMLHttpRequest 对象3 // options: AJAX 请求的配置参数4});| 参数名 | 参数类型 | 默认值 | 描述 |
|---|---|---|---|
| url | String | 当前页面的 URL | 请求的 URL 地址。 |
| method | String | GET | 请求方式。 包括:GET、POST、PUT、PATCH、HEAD、OPTIONS、DELETE |
| data | any | '' | 发送到服务器的数据。 |
| processData | Boolean | true | 是否把传递进来的数据转换成查询字符串发送。 |
| async | Boolean | true | 是否为异步请求。 |
| cache | Boolean | true | 是否从缓存中读取。只对 GET、HEAD 请求有效。 |
| username | String | '' | HTTP 访问认证的用户名。 |
| password | String | '' | HTTP 访问认证的密码。 |
| headers | Object | {} | 添加到 Headers 中的数据。可以在 beforeSend 回调函数中重写该值。 值为字符串或 null 的字段会被发送,值为 undefined 的字段会被移除。 |
| xhrFields | Object | {} |
设置在 XMLHttpRequest 对象上的数据。 |
| statusCode | Object | {} | HTTP 状态码和函数组成的对象。
状态码在 200 - 299 之间、或状态码为 304 时,表示请求成功,函数参数和 success 回调的参数相同;否则表示请求失败,函数参数和 error 回调的参数相同。 |
| dataType | String | text | 服务器返回的数据类型。 包括:text、json |
| contentType | String | application/x-www-form-urlencoded | 内容的编码类型。为 false 时将不设置 Content-Type。 |
| timeout | Number | 0 | 请求的超时时间(毫秒)。为 0 时表示永不超时。 |
| global | Boolean | true | 是否触发全局 AJAX 事件。 |
| beforeSend | Function | 在请求发送之前调用。返回 false 时将取消 AJAX 请求。 |
|
| success | Function | 请求成功之后调用。 |
|
| error | Function | 请求出错时调用。 |
|
| complete | Function | 请求完成之后调用。 |
|
注意:下面这些方法只在 MDUI 框架中存在,若你直接使用 mdui.jq 库,则不存在这些方法。
强制重绘当前元素。
11$('.box').reflow();设置当前元素的 transition-duration 属性。
可以是带单位的时间值,也可以不带单位。若不带单位,则将自动添加 ms 作为单位。
11$('.box').transition(100);在当前元素上添加 transitionend 事件回调。
回调函数的参数为 transitionend 事件对象,函数中的 this 指向当前元素。
31$('.box').transitionEnd(function () {2 console.log('.box 元素的 transitionend 事件已触发');3})设置当前元素的 transform 属性。
11$('.box').transform('rotate(90deg)')设置当前元素的 transform-origin 属性。
11$('.box').transformOrigin('top center')执行在当前元素及其子元素内注册的初始化函数。
11$('[mdui-collapse]').mutation()创建并显示遮罩,返回遮罩层的 JQ 对象。
可以传入一个整数参数,表示遮罩层的 z-index 样式,默认为 2000。
11$.showOverlay();隐藏遮罩层。
如果调用了多次 $.showOverlay() 来显示遮罩层,则也需要调用相同次数的 $.hideOverlay() 才能隐藏遮罩层。可以通过传入参数 true 来强制隐藏遮罩层。
11$.hideOverlay();锁定屏页面,禁止页面滚动。
11$.lockScreen();解除页面锁定。
如果调用了多次 $.lockScreen() 来显示遮罩层,则也需要调用相同次数的 $.unlockScreen() 才能隐藏遮罩层。可以通过传入参数 true 来强制隐藏遮罩层。
11$.unlockScreen();函数节流。
传入一个函数作为参数,函数的第一个参数是执行的函数,第二个参数是延迟时间,单位为毫秒。
31$.throttle(function () {2 console.log('这个函数最多 100ms 执行一次');3}, 100)生成一个全局唯一的 ID。
11$.guid();可以传入一个参数。当该参数值对应的 guid 不存在时,会生成一个新的 guid,并返回;当该参数对应的 guid 已存在,则直接返回已有 guid。
31// 下面两行代码返回值相同2$.guid('test');3$.guid('test');