2013-06-20 2 views
1

Я использую Greasemonkey и JavaScript для изменения страницы. Я нашел все внешние ссылки и добавил изображение перед ссылками, я хочу добавить событие mouseover на изображения. Я не знаю, как это сделать в цикле. Вот что у меня есть:Добавить изображения и событие mouseover в цикле, в сценарии Greasemonkey?

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)); 
    } 
} 

ответ

1

Не используйте анонимные функции в таком виде. Это приводит к проблемам памяти и производительности.

В любом случае, используйте 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 = ''; 
    } 
}