我必须将一个 src 设置为图像对象。然后我改变它。
但是如果我在元素中添加一些东西(元素的内容),例如
meaning.innerHTML += ")";
(其中含义是图像的父元素),那么如果更改对象的 src 它不会影响文档。
示例:http: //jsfiddle.net/WcnCB/3/
你能解释一下它为什么会发生,以及如何解决它吗?
我必须将一个 src 设置为图像对象。然后我改变它。
但是如果我在元素中添加一些东西(元素的内容),例如
meaning.innerHTML += ")";
(其中含义是图像的父元素),那么如果更改对象的 src 它不会影响文档。
示例:http: //jsfiddle.net/WcnCB/3/
你能解释一下它为什么会发生,以及如何解决它吗?
meaning.innerHTML += ')';
做的比你想象的要多。视觉上它只是附加一个)
字符,但在幕后发生的是:
meaning.innerHTML = meaning.innerHTML + ')';
因此,您首先将 DOM 转换为字符串表示 (HTML),然后添加一个)
字符,最后将其从 HTML 转换回 DOM。HTML 表示的所有元素都被重新创建,meaning
并被这些新元素替换。所以你的旧的被破坏了。
最简单的解决方案是使用createTextNode
:http: //jsfiddle.net/WcnCB/4/。
meaning.appendChild(document.createTextNode(")"));
通过编写innerHTML += ...
,您将覆盖以前的 HTML 并销毁对它的每个引用 - 包括actual_button
变量。
你为什么还要使用innerHTML += ...
?你应该这样做:
meaning.appendChild(document.createTextNode("(Something"));
当您犯下最大的罪过时,即.innerHTML +=
(特别是innerHTML
与 结合+=
,它们都不是单独的坏事),会发生什么:
因此,鉴于此,actual_button
指的是分离的 dom 元素。不是通过解析 html 创建的另一个 img 元素。
如果您设置图像 ID 并在更改 innerHTML 后获取它,则可以使用:
var meaning = document.getElementById('meaning');
meaning.innerHTML += 'Something ...';
var actual_button = document.createElement('img');
actual_button.id = 'actual_button';
actual_button.src = 'http://www.pawelbrewczynski.tk/images/add.png';
actual_button.className = 'add_word';
meaning.appendChild(actual_button);
meaning.innerHTML += " ... and another.";
var actual_button= document.getElementById('actual_button');
actual_button.src = 'http://www.pawelbrewczynski.tk/images/loading.gif';