Javascript:识别何时出现新的第二个元素,并仅在旧元素(突变观察者)上使用函数

问题描述 投票:0回答:1

我知道这里有很多关于突变观察者的问题得到了解答。但我还没有找到解决方案。

在网站上,当我使用特定工具单击某些内容时,我会打开一个结果窗口。当我使用该工具单击另一个对象时,将打开一个新的结果窗口,但旧的窗口不会关闭。 所以我希望当新窗口出现时旧窗口关闭。 我可以手动执行此操作,因为它们有一个关闭按钮。所以我可以使用简单的点击功能来关闭它:

document.querySelector('[title="closeButton"]').click();

问题是,当新窗口出现时,我只想关闭旧窗口。我尝试使用突变观察器来查看结果窗口何时出现,但即使这样也不起作用。虽然我已经在另一个地方使用过这样的观察者没有问题。

function closeResultWindow() {
  let observer = new MutationObserver(function (mutations) {
    let found = mutations.find(mutation => Array.from(mutation.addedNodes)
      .find(node => node.id ?
        node.id.includes("lefttabs_tablist_module_") : false))
    if (found) {
      console.log("Resultwindow found")
      document.querySelector('[title="closeButton"]').click();
      }
  });
  
  observer.observe(document.body, { 
    childList: true, subtree: true 
    });
};

我用观察者尝试了不同的功能。但这是我已经在另一个问题上成功使用的功能,只是将其调整为这个问题。

lefttabs_tablist_module_
是结果窗口的 widgetid。每个窗口的
lefttabs_tablist_module_
后面都有另一个数字。

例如,窗口 1 具有

widgetid=lefttabs_tablist_module_1256
,下一个窗口 2 具有
widgetid=lefttabs_tablist_module_7549
。好像没有时间顺序。

上面的观察者只是一个测试,看看我是否可以识别至少一个结果窗口。但目标是观察何时打开新窗口,因此有两个窗口,并使用单击功能关闭旧窗口。

有人知道这怎么可能吗? 或者至少我的代码中用观察者识别一个窗口的问题是什么。

javascript dom mutation-observers
1个回答
1
投票

好的,我解决了。现在它的工作原理是这样的:

function closeResultWindow() {
  let observer = new MutationObserver(function (mutations) {
    let found = document.querySelectorAll('[widgetid^="lefttabs_tablist_module_"]');

    if (found.length >= 2) {
      console.log("Resultwindow found")

      // find old result window
      let closeButton = found[0].querySelector('[title="Close"]');

      // close result window
      if (closeButton) { 
        closeButton.click();
        console.log("old result window closed");
      }
    }
  });
    observer.observe(document.body, { childList: true, subtree: true });
}

closeResultWindow();

现在,当我打开新窗口时,它会立即关闭旧窗口。 感谢您的帮助和解答!

© www.soinside.com 2019 - 2024. All rights reserved.