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。
 
 
详细代码
  | 
  | 
具体方法代码