【问题标题】:Javascript - Replace appendChild elementJavascript - 替换 appendChild 元素
【发布时间】:2016-11-07 08:14:30
【问题描述】:

JS 代码

watermark([scope.videoSnapshotPath, scope.watermarkLogoPath])
    .image(myPositionFunction(scope.watermarkPosition))
    .then(function (img) {
    document.getElementById(scope.watermarkPosition).appendChild(img);
})

当用户选择第一张图片时,结果如下

输出

<div data-water-mark="" id="lowerRight" class="col-lg-9 col-md-6 col-sm-6 col-xs-12 padding-l-0">    
    <img src="data:image1/png;base64"> //first image
</div>

When selects any other image, the first image is not replaced with second image but gets appended.

<div data-water-mark="" id="lowerRight" class="col-lg-9 col-md-6 col-sm-6 col-xs-12 padding-l-0">    
        <img src="data:image1/png;base64"> //first image
        <img src="data:image2/png;base64"> //second image
</div>

如何在div 中附加图像并用新选择的图像替换以前的图像,即用第二个替换第一个图像?

附: img src 是从插件 js 动态生成的,预计无需使用 jquery 即可解决。

【问题讨论】:

  • document.getElementById(scope.watermarkPosition).innerHTML = ''; document.getElementById(scope.watermarkPosition).appendChild(img);简单的方法:) 如果您必须在附加 div 中添加一个 ele

标签: javascript html angularjs image


【解决方案1】:

您可以更改 src 而不是追加一个新的。

$("#my_image").attr("src","data:image/png;base64");

【讨论】:

  • 其实这样更有意义
  • 我如何使用上述与我的代码更改图像源相关的内容?
  • 您只需为您的 img 提供一个类似 id="imageXYZ" 的 ID,然后将“#my_image”替换为“#imageXYZ”。
  • 但是 img src 是由我无法控制的第三方插件生成的。我可以在附加后对其进行操作。请建议一个替代解决方案
  • 如果这是 img 在这个 div 中的第一次出现,你可以使用这个:$('#lowerRight').find('img:first').attr("src","data:image/png;base64");
【解决方案2】:

您可以使用replaceChild (documentation)。

parentNode.replaceChild(newChild, oldChild);

var div = document.querySelector("div");
var newImg = document.createElement("img");
newImg.src = "http://placehold.it/400x150";

var swap = function(img) {
  div.replaceChild(img, div.children[0]);
}

document.querySelector("button").addEventListener("click", swap.bind(null, newImg));
<div>
  <img src="http://placehold.it/200x150">
</div>
<button>replace</button>

在您的代码中:

function (img) {
  var parent =  document.getElementById(scope.watermarkPosition);
  parent.replaceChild(img, parent.children[0])'
}

【讨论】:

  • 看来,除了上面的代码,我最初把document.getElementById(scope.watermarkPosition).appendChild(img);也放在了最后的代码document.getElementById(scope.watermarkPosition).appendChild(img); var watermark = document.getElementById(scope.watermarkPosition); watermark.replaceChild(img, watermark.children[0]);
  • 只放`var watermark = document.getElementById(scope.watermarkPosition); watermark.replaceChild(img, watermark.children[0])', 没有看到图片,或者猜测替换方法不起作用。
  • 我在答案中包含了一个交互式 sn-p,它显示了它是如何工作的。
  • 非常感谢您的解释,但就像您创建图像元素的方式一样,我也必须附加first 图像,然后对second 使用替换方法。可以吗?或者如何在我现有的代码中复制你的 sn-p ?
  • 我不确定你的意思...所有添加的img 元素都可以通过children 属性访问。当你使用appendChild 时,东西会被添加到最后(children[children.length - 1])。如果您想在自定义位置添加内容,请使用 insertBefore。使用replaceChild 将旧的img 换成新的...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
相关资源
最近更新 更多