Zepto.js 相关 DOM 操作
预计阅读时间: 8 分钟
一、DOM 元素的处理
1、获取页面所有的标签元素
2、获取 ID 为 app 的元素
3、创建元素
4、创建带有属性的元素
代码示例
1$("</p>", {
2 text: "创建带有属性的元素",
3 id: "app",
4 css: {
5 color: "darkblue"
6 }
7});
5、当页面 ready 时,执行回调函数
代码示例
1Zepto(function ($) {
2 alert("Ready to Zepto!");
3});
二、字符串&数组&对象处理
1、“驼峰命名法”转换字符串
代码示例
1let tf = $.camelCase("xiao-kang"); // xiaoKang
2let tf2 = $.camelCase("helloZepto!"); // helloZepto
注:如果待转换的字符串已经是“驼峰法”形式,则不会再进行转化。
2、检查父节点是否包含指定 DOM 节点
代码示例
1let flag = $.contains(parent, node); // true || false
注:若两者是相同节点,则返回false。
3、遍历数组元素
代码示例
1let arr = ["a", "b", "c", "hh", "gd", "zz"];
2$.each(arr, function (index, item) {
3 console.log("item %d is: %s", index, item); // item 'index' is: 'item'
4});
4、以 key-value 键值对方式遍历对象
代码示例
1$.each(
2 {
3 name: "zepto.js",
4 size: "98k"
5 },
6 function (key, value) {
7 console.log("%s : %s", key, value); // key :value
8 }
9);
5、源对象扩展目标对象(对象合并)
代码示例
1let obj1 = {
2 num: "A001",
3 tg: "kk"
4 },
5 obj2 = {
6 name: "zxk",
7 tg: "kang"
8 };
9$.extend(tag1, tag2); // {num: 'A001',name: 'zxk',tg: 'kang'}
10$.extend(true, tag1, tag2); // {num: 'A001',name: 'zxk',tg: 'kang'}
注:通过源对象扩展目标对象的属性,源对象属性将覆盖目标对象属性(后者覆盖前者);默认情况下为浅拷贝(浅复制);如果第一个参数为true,则表示深度拷贝(深度复制)。
6、Zepto.fn 对象
代码示例
1$.fn.empty = function () {
2 return this.each(function () {
3 this.innerHTML = "";
4 });
5};
注:Zepto.fn是一个对象,它拥有 Zepto 对象上所有可用的方法。
7、根据条件处理数组
代码示例
1$.grep([1, 2, 3], function (index, item) {
2 return item > 1; // [2,3]
3});
8、返回数组指定元素索引值
代码示例
1let aIndex = $.inArray("a", ["c", "a", "d"]);
2console.log(aIndex); // 1
3
4let bIndex = $.inArray("b", ["c", "d", "a", "b", "z"], 1);
5console.log(bIndex); // 3
6
7let cIndex = $.inArray("y", ["z", "x", "k"], 1);
8console.log(cIndex); // -1
注意「👀」:
返回数组中指定元素的索引值(以0为基数);如果没有找到该元素则返回 -1。**[fromIndex]**参数可选,表示从哪个索引值开始 向后查找。
9、判断是否为数组 Array
代码示例
1let arr = ["1"],
2 str = "aaa";
3
4$.isArray(arr); // true
5$.isArray(str); // false
10、判断是否为函数 Function
代码示例
1let fn = function () {},
2 str = "fn";
3
4$.isFunction(fn); // true
5$.isFunction(str); // false
11、判断是否为纯粹的对象 Object
代码示例
1$.isPlainObject({}); // true
2$.isPlainObject(new Object()); // true
3$.isPlainObject(new Date()); // false
4$.isPlainObject(window); // false
12、判断是否为 window 对象
代码示例
1$.isWindow(window); // true
2$.isWindow(document); // false
13、数组元素过滤
代码示例
1let arr = [1, 3, 5, null, 7, 9, undefined, 11];
2let newArr = $.map(a12, function (item, index) {
3 if (item > 1) return item * item;
4});
5console.log(newArr); // [9, 25, 49, 81, 121]
注:通过迭代函数可以将 null 和 undefined 过滤掉。
14、对象集合过滤
代码示例
1let obj = $.map(
2 {
3 x: 1,
4 y: 2,
5 z: 3,
6 k: ""
7 },
8 function (item, index) {
9 if (item > 1) {
10 return item * item;
11 }
12 }
13);
14console.log(obj); // [4, 9]
15、JSON 转换
代码示例
1$.parseJSON(string); // 将JSON字符串转化为JSON对象
注:$.parseJSON(string) 为原生 JSON.parse(string) 方法的别名。
16、获取 JavaScript 对象的类型
代码示例
1let arr = [5, "z", 11];
2console.log($.type(arr)); // array
注:JavaScript 对象类型有null、undefined、boolean、number、string、function、array、date、regexp、object、onerror(onerror 事件在加载外部文件(文档或图像)发生错误时触发)。
三、DOM 元素属性操作
1、add:添加 DOM 元素
代码示例
1$("div").add("p").css("background-color", "red");
2、addClass:为元素添加 Class
代码示例
1$("p").addClass("active");
注:若有多个 class 类名,使用空格隔开。
3、after:在匹配元素后插入内容
代码示例
1$("body div").after("插入的内容");
4、append:在匹配元素末尾插入内容
代码示例
1$("ul").append("<li>last append!</li>");
5、appendTo:将前元素插到后元素末尾
代码示例
1$("<li>将匹配的元素插入到目标元素的末尾</li>").appendTo("ul");
6、attr:读取或设置元素的属性
代码示例
1$("form").attr("action"); //读取
2$("form").attr("action", "/create"); //设置
3$("form").attr("action", null); //移除
4
5// 多个属性
6$("form").attr({
7 action: "/create",
8 method: "post"
9});
注意事项:
- 若未给定 value 参数,则读取对象集合中第一个元素的属性值;
- 当给定 value 参数时,则设置对象集合中所有元素的该属性的值;
- 当 value 参数为null时,则这个属性将被移除(类似removeAttr);
- 多个属性可以通过对象键值对的方式进行设置;
- 要读取元素属性,如checked和selected,则需使用prop。
7、before:在匹配元素前插入内容
代码示例
1$("p").before("<li>yyyyyyyyyyyy</li>");
8、children:获取匹配元素的直接子元素
代码示例
1$("ul").children("*:nth-child(2n)");
注:children获得每个匹配元素集合的直接子元素,若给定selector,则返回结果中只包含符合 css 选择器的元素。
9、clone:通过深克隆来复制所有元素
代码示例
1let lis = $("ul li");
2lis.closest("ul");
10、concat:获取匹配元素集合的子元素
代码示例
1let a = [1, 2, 3],
2 b = [4, 5, 6];
3let c = [].concat(a, b);
4console.log(c); // [1, 2, 3, 4, 5, 6]
注:包括文字和注释节点。
11、contents:获取匹配元素集合的子元素
代码示例
1let obj = $("ul").contents();
2console.log(obj); // [text, li, text, li, text, li, text, li, li, selector: Array[9]]
注:包括文字和注释节点。
四、样式属性操作
1、css 样式操作
代码示例
1let h = $("h1");
2h.css("color"); // 读取color
3h.css("background-color", "#369"); // 设置背景颜色
4h.css("background-color", ""); // 移除背景颜色
2、data-:自定义属性
代码示例
1$("p").data("app"); // data- app 中的自定义属性
2
3// 设置自定义属性:类似于attr的自定义属性
4$("div").data("box", "content"); // data-box="content"
注:读取或写入 DOM 的 data-* 属性。有点像 attr ,但是属性名称前面加上 data-。
3、each:遍历
代码示例
1$("#app ul li").each(function (index) {
2 console.log("li-%d: is %s", index, this);
3});
4、eq(index),empty()清空元素内容
5、find:查找 DOM 元素
6、first:获取当前对象第一个元素
7、forEach():遍历对象集合中每个元素
代码示例
1forEach(function (item, index, array) {}, [context]);
注:遍历的参数不一样。
8、get()
代码示例
1get() => array get(index) => DOM node
8、has():是否含有符合选择器的元素
代码示例
1$("ul>li").has("a[href]");
注意事项:
- 判断当前对象集合的子元素是否含有符合选择器的元素,或者是否包含指定的 DOM 节点;
- 若有,则返回新的对象集合;
- 该对象会过滤掉不含有选择器匹配元素或者不含有指定 DOM 节点的对象。
9、hasClass():是否含有指定 class
代码示例
1$("li").hasClass("abcd"); // true || false
10、height():获取或设置元素高度
代码示例
1$(window).height();
2$(document).height();
备注:
- 获取对象集合中第一个元素的高度;
- 或者设置对象集合中所有元素的高度。
11、hide():元素的显示或隐藏
注:通过设置 css 的属性 display 为 none 来将对象集合中的元素隐藏。
12、html():获取或设置元素内容
代码示例
1$("#app li").html(function (idx, oldHtml) {
2 return oldHtml.replace(/(^|\W)@(\w{1,15})/g, '$1@<a href="http://twitter.com/$2">$2</a>');
3});
13、index():获取元素的索引值
代码示例
1$("li:nth-child(2)").index();
14、indexOf(element,[formIndex])
代码示例
1$("li").indexOf("p", 2); // 在当前对象集合中获取一个元素的索引值
15、insertAfter():将集合元素插入到目标元素后
代码示例
1$("<p>Emphasis mine.</p>").insertAfter("#app");
16、insertBefore():将集合元素插入到目标元素前
代码示例
1$("<p>See the following table:</p>").insertBefore("#app");
17、is():当前元素集合首个元素是否包含指定 css 选择器
代码示例
1$('#app div').is('p') => boolean
18、last():获取对象集合中的最后一个元素
19、map():遍历对象集合的所有元素
代码示例
1$("ul li").map(function (index, item) {
2 // 遍历对象中的this指向当前循环项
3 console.log(index);
4 console.log(item);
5});
20、next():获取当前对象集合中的每个元素的下一个兄弟节点
21、not():过滤当前对象集合
代码示例
1$("ul li").not("p"); // 获取一个新的对象集合,它里面的元素不能匹配css选择器。
22、offset():获得当前元素相对于 document 的位置
代码示例
1$("#app").offset(); // 返回一个对象含有: top, left, width和height
23、offsetParent():找到第一个定位过的祖先元素
代码示例
1$("ul").offsetParent(); // 意味着它的css中的position 属性值为“relative”, “absolute” or “fixed”
24、parent():获取对象集合中每个元素的直接父元素
25、parents():获取对象集合每个元素所有祖先元素
26、pluck():获取对象集合中每一个元素的属性值
代码示例
1$("body > *").pluck("nodeName"); // ["P", "DIV", "P", "SCRIPT"]
27、position():获取对象集合中第一个元素的位置
代码示例
1$("#app").css({
2 position: "fixed",
3 top: 200,
4 left: 200
5});
28、prepend():将参数内容插入到每个匹配元素的前面
代码示例
1$("ul").prepend("<li>wertyui</li>");
29、prependTo():将所有元素插入到目标前面
代码示例
1$("<li>qazqaertyujhgfyuik</li>").prependTo("ul");
30、prev():获取对象集合中每一个元素的前一个兄弟节点
31、prop():读取或设置元素的属性
代码示例
1// #check1:checked,#check2:uncheck
2$("#check1").attr("checked"); //=> "checked"
3$("#check1").prop("checked"); //=> "true"
4$("#check2").attr("checked"); //=> "false"
5$("#check2").prop("checked"); //=> "false"
6$("input[type='checkbox']").prop("type", function (index, oldvalue) {
7 console.log(index + "|" + oldvalue);
8});
9//=> 0|checkbox
10//=> 1|checkbox
11$("input[type='checkbox']").prop("className", function (index, oldvalue) {
12 console.log(index + "|" + oldvalue);
13});
14//=> 0|ty
15//=> 1|yt
注:它在读取属性值的情况下优先于 attr,因为这些属性值会因为用户的交互发生改变,如checked
and selected
。
32、push():添加元素到当前对象集合最后
代码示例
1$.('#app').push('p', 'div'); ⇒ self
33、ready():添加一个事件侦听器
代码示例
1Zepto(function ($) {
2 alert("Zepto的ready监听方法!");
3});
注:当页面 DOM 加载完毕 “DOMContentLoaded” 事件触发时触发。