ZBLOG

HTMLBodyElement.prototype.appendChild = function (node) { console.log('A node is being appended to the body:', node); // 调用原始的 appendChild 方法以执行实际操作 return originalBodyAppendChild.call(this, node); }; 如何获取当前node节点包含的所有src和href属性,node可...

要获取 node 节点及其所有子节点中的 srchref 属性,你可以使用递归函数来遍历整个节点树。下面是一个实现示例:

// 保存原始的 appendChild 方法
const originalBodyAppendChild = HTMLBodyElement.prototype.appendChild;

// 用于提取所有 src 和 href 的递归函数
function extractSrcAndHref(node) {
    const srcs = [];
    const hrefs = [];

    // 检查当前节点是否为元素节点
    if (node.nodeType === Node.ELEMENT_NODE) {
        const src = node.getAttribute('src');
        const href = node.getAttribute('href');

        // 如果存在,则将其添加到相应的数组中
        if (src) {
            srcs.push(src);
        }
        if (href) {
            hrefs.push(href);
        }
    }

    // 遍历子节点并递归调用
    for (let i = 0; i < node.childNodes.length; i++) {
        const childNode = node.childNodes[i];
        const { src: childSrc, href: childHref } = extractSrcAndHref(childNode);
        
        srcs.push(...childSrc);
        hrefs.push(...childHref);
    }

    return { src: srcs, href: hrefs };
}

HTMLBodyElement.prototype.appendChild = function (node) {
    console.log('A node is being appended to the body:', node);

    // 提取当前节点和所有子节点中的 src 和 href
    const { src, href } = extractSrcAndHref(node);

    // 输出结果
    console.log('Found src attributes:', src);
    console.log('Found href attributes:', href);

    // 调用原始的 appendChild 方法以执行实际操作
    return originalBodyAppendChild.call(this, node);
};

代码解释:

  1. 保存原始方法:如之前所述,首先保存原始的 appendChild 方法。
  2. 创建递归函数:定义了一个名为 extractSrcAndHref 的函数,用于提取给定节点及其所有子节点中的 srchref 属性。
    • 它会检查当前节点,如果是元素节点,则获取并存储 srchref 属性。
    • 然后,它遍历该节点的所有子节点,对每个子节点递归调用自身,以提取其中的属性。
  3. 输出结果:在自定义的 appendChild 方法中调用这个递归函数,并将找到的所有属性打印到控制台。
  4. 调用原始方法:最后,仍然调用保存下来的原始 appendChild 方法以保持功能正常。

这样,无论你将什么类型的元素(包括带有其他嵌套子元素)添加到 <body> 中,都能够正确提取出其中包含的所有 srchref 属性。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=18874

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?