ZBLOG

// 创建 MutationObserver 实例并传入回调函数 const observer = new MutationObserver((mutationsList) => { for (let mutation of mutationsList) { if (mutation.type === 'childList') { if (mutation.addedNodes.length) { ...

要获取新添加的节点的 srchref 属性并进行修改,可以在观察到子节点变化时,对 addedNodes 进行遍历,检查每个节点的类型,并根据需要修改相应的属性。以下是如何实现这一功能的示例代码:

// 选择要观察的目标节点(这里观察整个文档)
const targetNode = document;

// 创建一个配置对象,指定我们想要观察的变化类型
const config = {
    childList: true, // 观察子节点的增加与删除
    subtree: true // 如果为 true,则会递归地检查后代节点
};

// 创建 MutationObserver 实例并传入回调函数
const observer = new MutationObserver((mutationsList) => {
    for (let mutation of mutationsList) {
        if (mutation.type === 'childList') {
            if (mutation.addedNodes.length) {
                mutation.addedNodes.forEach(node => {
                    // 检查添加的节点是否为元素节点
                    if (node.nodeType === Node.ELEMENT_NODE) {
                        // 检查 src 和 href 属性并进行修改
                        if (node.hasAttribute('src')) {
                            const originalSrc = node.getAttribute('src');
                            console.log('添加了图像或脚本节点,原始 src:', originalSrc);
                            // 在这里可以修改 src,例如:
                            node.setAttribute('src', '新的链接'); 
                        }
                        
                        if (node.hasAttribute('href')) {
                            const originalHref = node.getAttribute('href');
                            console.log('添加了链接节点,原始 href:', originalHref);
                            // 在这里可以修改 href,例如:
                            node.setAttribute('href', '新的链接'); 
                        }
                    }
                });
            }

            if (mutation.removedNodes.length) {
                console.log('移除了这些子节点:', mutation.removedNodes);
            }
        } else if (mutation.type === 'attributes') {
            // 属性变化处理逻辑(如果需要的话)
        } else if (mutation.type === 'characterData') {
            // 文本内容变化处理逻辑(如果需要的话)
        }
    }
});

// 开始观察目标节点以进行所需的变更
observer.observe(targetNode, config);

// 示例操作:向文档中添加一个新的 img 标签和 a 标签以测试观察器。
const imgElement = document.createElement('img');
imgElement.setAttribute('src', 'http://example.com/original-image.png');
document.body.appendChild(imgElement);

const linkElement = document.createElement('a');
linkElement.setAttribute('href', 'http://example.com/original-link');
document.body.appendChild(linkElement);

代码说明:

  1. 创建 MutationObserver:同之前一样,我们创建了一个 MutationObserver 的实例来监听 DOM 的变化。

  2. 遍历 addedNodes:当有新子节点被添加时,我们通过 forEach() 遍历所有的新添加元素。

  3. 检查元素类型:确保只对元素类型 (Node.ELEMENT_NODE) 的新添加节点执行操作。

  4. 检查和修改属性

    • 使用 hasAttribute() 方法检查该元素是否具有 srchref 属性。
    • 使用 getAttribute() 获取其原始值并打印。
    • 使用 setAttribute() 修改这些属性为你希望的新值。

注意事项:

  • 确保你的代码是运行在合适的环境中,以便能够正确识别并修改这些动态生成或插入到 DOM 中的元素。
  • 修改链接或图像地址可能会影响页面功能,因此请谨慎处理。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?