js 简单实现 NodeIterator 接口

源代码

/**
 * @description 实现一个遍历 DOM iterator
 * @author day0 2021-6-17
 * @version 1.0.0
 * @param { object } root 被遍历的根节点
 * @param { function } filter 过滤器函数,返回 true 表示要查找此节点,返回 false 表示要过滤此节点
 * @returns { object } 返回遍历器对象,包含 nextNode 方法与 previewNode 方法
 */
function findTree(root, filter) {
  let childs = root.childNodes,
    len = root.childNodes.length,
    index = 0,
    needChilds = [];

  console.log(childs);

  if (typeof filter === "function") {
    while (index < len) {
      if (filter(childs[index])) {
        needChilds.push(childs[index]);
      }
      ++index;
    }
    index = 0;
    len = needChilds.length;
  } else {
    needChilds = childs;
  }

  return {
    nextNode() {
      return index < len
        ? { node: needChilds[index++], done: false }
        : { node: undefined, done: true };
    },
    previousNode() {
      return index > 0
        ? { node: needChilds[--index], done: false }
        : { node: undefined, done: true };
    },
  };
}

var filter = function (node) {
  return node.nodeName.toLowerCase() == "p" ? true : false;
};

var it = findTree(document.body, filter);
var current = it.nextNode();
while (!current.done) {
  console.log(current.node);
  current = it.nextNode();
}

南无阿弥陀佛
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值