javascript - Tampermonkey,在点击事件上从附加的 DOM 对象调用用户脚本函数

标签 javascript jquery greasemonkey tampermonkey

我几乎尝试了在 StackOverflow 上找到的所有解决方案,但没有一个能帮助我解决问题。这是我的代码:

//Toolbar body

var toolbarbody = '<div id="scrappytoolbar" style="width:100%; height:30px; background-color: #ffea56;">' +
'<ul>' +
'<li id="litabelka">Tabelka</li>' +
'<li id="licena">Cena</li>' +
'<li>Opis</li>' +
'</div>';


//Toolbar Loading

function loadToolbar() {
 $("#article-desc-wrapper").css("margin-top", "320px");
 $("#productDetailsMainInfo").after(toolbarbody); 
 $("#productDetailsHeadlineArea").after('<button id="guziktestowy">Hehes</button>');
    
    
    
}

setTimeout(loadToolbar, 2000);

附加 HTML 后,我想在 li#litabelka 上添加一个监听器执行一些用户脚本代码。我尝试了 jQuery onclick和普通的 javascript addEventListener但点击事件没有执行 - 点击时没有任何反应。

最佳答案

我建议您使用 DOM 来解析 HTML。你可以这样做:

var toolbarbody = '<div id="scrappytoolbar" style="width:100%; height:30px; background-color: #ffea56;">' +
'<ul>' +
'<li id="litabelka">Tabelka</li>' +
'<li id="licena">Cena</li>' +
'<li>Opis</li>' +
'</div>';
var parser = document.createElement("div");
parser.innerHTML = toolbarbody;
var toolbarElement = parser.firstChild;
// remove the toolbar from parser
parser.removeChild(toolbarElement);

现在实际的 DOM 元素位于 toolbarElement 中,因此您可以在它们上应用监听器:

toolbarElement.querySelector("#litabelka").addEventListener("click", function() {
    // do something on click here
});

但请记住,现在您需要附加 toolbarElement,而不是 HTML 字符串:

function loadToolbar() {
    $("#article-desc-wrapper").css("margin-top", "320px");
    // we now append DOM element
    $("#productDetailsMainInfo").after(toolbarElement); 
    $("#productDetailsHeadlineArea").after('<button id="guziktestowy">Hehes</button>');
}

另请注意,最好等待加载DOMContentLoaded事件而不是使用 setTimeout

关于javascript - Tampermonkey,在点击事件上从附加的 DOM 对象调用用户脚本函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45797850/

相关文章:

javascript - 在滚动条上切换事件

javascript - 如何使用 Angular.js 或 Javascript 根据键值测量 Json 数组长度

javascript - 具有多个图像模态的页面在第一个模态之后不加载图像

javascript - 将 div 内容与另一个 div 内容位置切换

css - jquery-ajax 表单提交修改css

javascript - 如何在折线上创建一个标记,该标记与折线上的另一个标记有一定距离 - GoogleMaps API Javascript V3

javascript - 试图在 div 悬停上居中阅读更多链接?

javascript - WIll window.addEventListener ("load", function(), false);等待浏览器自动填充字段?

javascript - 设置等待时间,延迟时间,执行脚本

javascript - 执行 php 后如何加载用户脚本?