javascript - 在 Greasemonkey 脚本中循环添加图像和鼠标悬停事件?

标签 javascript dom loops greasemonkey addeventlistener

我正在使用 Greasemonkey 和 JavaScript 来修改页面。我找到了所有外部链接并在链接之前添加了图像,我想在图像上添加鼠标悬停事件。我不知道如何在循环中做到这一点。这是我所拥有的:

var anchors = document.evaluate('//a[@target]',document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var icon4 = document.createElement('img');
icon4.src = '...'; 
for (var a = 0; a < anchors.snapshotLength; a++){
  if (anchors.snapshotItem(a).href.substring(0,16) != location.href.substring(0,16)){
    icon4.addEventListener('mouseover', function(){this.title = 'Hello'}, false);
    icon4.addEventListener('mouseout', function(){this.title = ''}, false);
    anchors.snapshotItem(a).parentNode.insertBefore(icon4.cloneNode(true),anchors.snapshotItem(a));
  }
}

最佳答案

不要在这样的循环中使用匿名函数。这会导致内存和性能问题。

无论如何,使用the return value of insertBefore() 。像这样:

var anchors = document.evaluate (
    '//a[@target]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null
);
var icon4   = document.createElement('img');
icon4.src   = '...';

for (var a = 0; a < anchors.snapshotLength; a++) {
    if (anchors.snapshotItem(a).href.substring(0, 16) != location.href.substring(0, 16)) {
        var newNode = anchors.snapshotItem(a).parentNode.insertBefore (
            icon4.cloneNode (true), anchors.snapshotItem (a) 
        );

        newNode.addEventListener ('mouseover', myMouseInOutHandler, false);
        newNode.addEventListener ('mouseout',  myMouseInOutHandler, false);
    }
}

function myMouseInOutHandler (zEvent) {
    if (zEvent.type == "mouseover") {
        zEvent.target.title = 'Hello';
    }
    else if (zEvent.type == "mouseout") {
        zEvent.target.title = '';
    }
}

关于javascript - 在 Greasemonkey 脚本中循环添加图像和鼠标悬停事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17217989/

相关文章:

javascript - Jquery: keydown() 只运行一次

javascript - 检索 Json 对象值

javascript - for循环内的jQuery ()load方法,如何在错误时退出?

javascript - 为什么 JQuery 需要全局 "window"对象?

javascript - 为什么以下 Java 脚本无法加载 XML?

javascript - 有没有办法卡住或锁定页面的 DOM?

Perl DBI 动态 fetchrow while 循环

java - 简单嵌套循环的逻辑问题

javascript - 有没有一种简单的方法可以创建一次显示多个月份的月/年日期选择器?

ios - 如何在sqlite中使用循环从特定列获取名称