首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每次绘制popover时添加一个元素

每次绘制popover时添加一个元素
EN

Stack Overflow用户
提问于 2022-06-17 09:35:00
回答 1查看 58关注 0票数 1

当一个元素出现在页面上时,我想编写脚本,将一个元素添加到具有特定id的其他元素中。当用户悬停在其他元素上时,它将添加到文档中。

在业务逻辑方面:当用户在用户名上徘徊时,就会出现一个弹出器。我想在每个出现的弹出框中为孩子添加一个按钮。

我看过this,下面的代码类似于这个构造,而且它可以工作。问题是它只检查一个元素,当它出现时,就结束它的工作。我理解,为了检查每个元素,我应该删除行this.disconnect();。然而,这只会导致网页挂起。

我该怎么做才能让它发挥作用?我做错了什么吗?

代码语言:javascript
复制
// ==UserScript==
// @name         ms_teams_integration
// @match        https://example.com/*
// @version      1.0
// @grant        none
// @run-at       document-start
// @require      https://greasyfork.org/scripts/12228/code/setMutationHandler.js
// ==/UserScript==

var teamsIcon = ""; // icon in svg format here

setMutationHandler(document, '#user-hover-email', function(nodes) {
    this.disconnect();
    nodes.forEach(function(n) {
        var emailLink = n.getElementsByTagName("a").item(0);
        var teamsLink = emailLink.cloneNode(true);
        teamsLink.setAttribute(
            "href", 
            teamsLink.getAttribute("href")
                .replace("mailto:", "https://teams.microsoft.com/l/chat/0/0?users="));
        teamsLink.setAttribute("target", "_blank");
        teamsLink.innerHTML = teamsIcon;
        n.appendChild(teamsLink);
    });
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-18 06:06:10

它挂起是因为您的代码会导致一个新的突变,这个变异会被一次又一次地检测到。要防止出现这种情况,请检查新元素是否已经添加:

代码语言:javascript
复制
    nodes.forEach(function(n) {
        if (n.__ms_teams_integration) return;
        var emailLink = n.getElementsByTagName("a").item(0);
        // ...............
        // ...............
        n.appendChild(teamsLink);
        n.__ms_teams_integration = true;
    });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72657284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档