appendTo方法
- 语法:
.appendTo(target) - target类型 选择器、dom元素、dom数组
- 统一target类型 为 moyas对象:为了方便操作
- 实现思路
- 统一target类型,定义新增节点变量node,临时存储要分配的节点
- 定义ret数组变量,用来存储总共分配出去的节点
- 遍历this上的每一个dom元素,在遍历target上的每一个dom元素
- 首先判断当前dom元素是否为target上的第一个dom元素
- 如果为真,就不克隆节点,直接将要被添加的节点赋值给node
- 如果为假,就要深克隆节点,在赋值给node
- 使用遍历target当前的dom元素 追加 指定节点node
- 两层循环结束,操作完成。
- 最后将ret转换成moyas对象,作为appendTo方法的返回值。实现链式编程
append方法
- 语法:
.append(source); - 功能:将source上的所有dom元素 追加到 moyas对象 上
- 实现思路
- 统一source类型,为moyas对象。
- source.appendTo(this)
- return this;
prependTo方法
- 语法:
.prependTo(target); - 功能:将moyas对象上的每一个dom元素 追加到 target 最前边 insertBefore
- 实现思路
- 统一target类型, 为 moyas对象
- 定义node变量,临时存储被追加的节点。定义ret数组,存储所有被追加的节点
- 先遍历target上的每一个dom元素,
- 定义变量firstChild,临时存储当前目标dom元素的第一个子节点,在遍历this上每一个dom元素
- 判断当前遍历的dom是否为target上的第一个dom元素
- 如果为真,此时不需要克隆节点
- 否则,要深克隆节点
- 将上述得到的节点,push到ret内
- 调用insertBefore方法 追加 节点,此时第一个参数为追加新的节点,第二个参数为 firstChild
在 firstChild 之前追加 新节点。 - 两层循环结束,操作完成
- 将ret转换成moyas对象,作为prependTo方法的返回值。实现链式编程。
prepend方法
- 语法:
.prepend(source); - 功能:把source上的所有的dom元素,添加到this上的最前边
- 实现思路:
- 统一source类型,为moyas对象
- 通过source调用prependTo方法,将source上的所有dom添加到this上的最前边
- return this实现链式编程
next方法
- 功能:获取moyas对象上所有dom元素的下一个兄弟元素(nextSibling)
- 语法:
.next(); 返回值类型:moyas对象 - 实现思路
- 定义ret数组,存储所有dom的下一个兄弟元素
- 遍历this上的所有dom元素
- 遍历当前dom元素下面的所有兄弟,如果类型为 元素,将此元素存储ret内,结束循环。
- 两层循环结束,将ret转换成moyas对象,作为next方法的返回值。
nextAll方法
- 功能:获取moyas对象上所有dom元素下面的所有兄弟元素(nextSibling)
- 语法:
.nextAll(); 返回值类型:moyas对象 - 实现思路
- 定义ret数组,存储所有dom下面的所有兄弟元素
- 遍历this上的所有dom元素
- 遍历当前dom元素下面的所有兄弟节点,如果类型为 元素,将此元素存储ret内。
- 两层循环结束,将ret去重后,转换成moyas对象,作为nextAll方法的返回值。
before方法
- 功能:
- 语法:
.before(source) - 实现思路
- 统一source类型为 moyas对象
- 遍历this上的每一个dom元素
- 在遍历source上的每一个dom元素
- 判断当前遍历this的dom元素的 索引是否为0
- 如果为0,不需要拷节点
- 否则要深拷贝节点
- 先拿到当前遍历this的dom元素的父节点,调用insertBefore方法在其前面添加上面得到的新节点
- 两层循环完毕,操作完成
- return this实现链式编程
after方法(选做)
- 功能:
- 语法:
.after(source) - 实现思路
- 定义nextSibling变量,存储dom元素的下一个兄弟节点
- 统一source类型为 moyas对象
- 遍历this上的每一个dom元素
- 在遍历source上的每一个dom元素
- 判断当前遍历this的dom元素的 索引是否为0
- 如果为0,不需要拷节点
- 否则要深拷贝节点
- 先拿到当前遍历this的dom元素的父节点,调用insertBefore方法在nextSibling前面添加上面得到的新节点
- 两层循环完毕,操作完成
- return this实现链式编程
remove方法
- 功能:将筛选出来的所有dom元素 删除掉
- 实现思路
- 遍历this上的所有dom元素
- 获取当前dom元素的父节点,调用removeChild方法删除自己
- 循环结束,返回this。
empty方法
- 功能:将筛选出来的所有dom元素 清空后代节点。
- 实现思路
- 遍历this上的所有dom元素
- 直接给当前dom元素的innerHTML属性赋值为 空字符串
- 循环结束,返回this, 实现链式编程。
prev方法
prevAll方法
moyas.unique方法
- 功能:实现数组元素去重
- 语法:var newRet = moyas.unique(arr);
- 实现思路
- 定义空数组对象ret。存储去重后元素
- 遍历原数组,如果当前遍历到的元素在ret中不存在,就添加到ret内
- 循环结束,ret存储的就是去重后的元素
- 返回ret
- 兼容IE8 indexOf方法
- 首先判断当前浏览器是否支持indexOf方法
- 如果不支持,就给数组对象的原型添加 indexOf方法
- 遍历this上的所有元素
- 如果遍历到的当前元素 和 指定参数值 相同,就直接返回其 索引值。结束循环
- 如果在整个上述循环都没有返回值,那么表示不存在指定参数值,就返回 -1。
详细代码
|
|
具体方法代码