我想修改一个div中的所有链接,使它们不再指向一个页面,而是在被点击时运行一个JavaScript函数。为此,我编写了以下函数:
function buildPageInDiv(htmlString){
console.log(typeof htmlString);
$div = $(htmlString).children("div#myDiv");
$div.children("a").each(function(i, element){toJavascriptLinks(element)});
document.getElementById("targetDiv").innerHTML = $div[0].innerHTML;
}
调用此函数:
function toJavascriptLinks(element){
element.href="#";
element.onclick = function(){console.log('Yeah!')};
console.log(element);
}
现在,当我运行
buildPageInDiv
时,在控制台上会打印出 'string',所有的“href”都被更改为“#”,并且对于中的每个
尽管我最初发布的代码没有问题,但下面详细的回答使我找到了解决方案。
<a>
元素,控制台都会打印该元素。 <a href="#">
这里没有任何 onclick
的迹象,点击链接并不会在控制台上显示任何内容。
我错过了什么吗?
编辑:
我找错地方了。问题是我在将 innerHTML 附加到 targetDiv
之前运行了 toJavascriptLinks(element)
。对于 href 属性来说,这不是问题,但对于 onclick
属性来说是个问题。解决方案很简单,先把它放在 targetDiv
中,然后在 targetDiv
上运行 toJavascriptLinks(element)
:
function buildPageInDiv(htmlString){
console.log(typeof htmlString);
var content = $(htmlString).children("div#myDiv")[0].innerHTML;
document.getElementById("targetDiv").innerHTML = content;
$("div#targetDiv").children("a").each(function(i, element) toJavascriptLinks(element)});
}
尽管我最初发布的代码没有问题,但下面详细的回答使我找到了解决方案。