【问题标题】:Javascript Move IMG Element DynamicallyJavascript动态移动IMG元素
【发布时间】:2019-08-11 19:22:56
【问题描述】:

在某些内容之间动态移动 img 元素时遇到问题。

之前:

    <img id="moveme" class="product__image lazyload-fade lazyautosizes lazyloaded"src="https://cdn.shopify.com/s/files/1/2997/4910/files/blackjacket_overlay.png?9630" style="
    position: absolute;
">
<div class="slick-slide" data-slick-index="0" aria-hidden="true" role="tabpanel" id="slick-slide10" style="width: 447px;" tabindex="-1" aria-describedby="slick-slide-control10"><div><a class="fancybox" href="" tabindex="-1" style="width: 100%; display: inline-block;"></div>

  <div class="slick-slide slick-current slick-active" data-slick-index="1" aria-hidden="false" role="tabpanel" id="slick-slide11" style="width: 447px;" aria-describedby="slick-slide-control11"><div><a class="fancybox" href="https://cdn.shopify.com/s/files/1/2997/4910/files/blackjacket_overlay.png?9630" tabindex="0" style="width: 100%; display: inline-block;">
        <div class="product-main-image selected" data-image-id="12046975205420" style="position: absolute; overflow: hidden; display: block;">
            <img id="3971000074284" class="product__image lazyload-fade lazyautosizes lazyloaded" >
    </div>

之后:

<div class="slick-slide" data-slick-index="0" aria-hidden="true" role="tabpanel" id="slick-slide10" style="width: 447px;" tabindex="-1" aria-describedby="slick-slide-control10"><div><a class="fancybox" href="" tabindex="-1" style="width: 100%; display: inline-block;"></div>

  <div class="slick-slide slick-current slick-active" data-slick-index="1" aria-hidden="false" role="tabpanel" id="slick-slide11" style="width: 447px;" aria-describedby="slick-slide-control11"><div><a class="fancybox" href="https://cdn.shopify.com/s/files/1/2997/4910/files/blackjacket_overlay.png?9630" tabindex="0" style="width: 100%; display: inline-block;">
        <div class="product-main-image selected" data-image-id="12046975205420" style="position: absolute; overflow: hidden; display: block;">
          <!-- I WANT TO DYNAMICALLY PUT THE FOLLOWING ONE IMG ELEMENT HERE USING JAVASCRIPT -->
    <img id="moveme" class="product__image lazyload-fade lazyautosizes lazyloaded"src="https://cdn.shopify.com/s/files/1/2997/4910/files/blackjacket_overlay.png?9630" style="
    position: absolute;
">
            <img id="3971000074284" class="product__image lazyload-fade lazyautosizes lazyloaded" >
    </div>

【问题讨论】:

    标签: javascript jquery html css shopify


    【解决方案1】:

    使用 insertBefore https://developer.mozilla.org/en-US/docs/Web/API/Node/insertBefore

    你可以用createElement创建新图像,用setAttribute添加属性,即你的新节点

    const newImage = document.createElement('img');
    newImage.className = 'product__image lazyload-fade lazyautosizes lazyloaded';
    newImage.setAttribute('id', 'moveme');
    newImage.setAttribute('src', 'https://cdn.shopify.com/s/files/1/2997/4910/files/blackjacket_overlay.png?9630');
    newImage.style.position = 'absolute';
    const parent = document.querySelector('div[data-image-id="12046975205420"]');
    const refNode = document.querySelector('#3971000074284');
    parent.insertBefore(newImage, refNode);
    

    选择已有图像,即参考节点,然后 选择容器div,即父节点

    parentNode.insertBefore(newNode, referenceNode)

    【讨论】:

    • 可以使用其他的querySelector吗?
    • @Lake 你是什么意思?像 getElementByID 等?是的,随意选择
    • 测试过,没用。试图让它在这里工作:creatortoronto.com/collections/eric-lee/products/…
    • Uncaught DOMException: Failed to execute 'insertBefore' on 'Node': 要插入新节点的节点不是该节点的子节点。
    • @Lake 表示referenceNode 不是parentNode 的子节点。我无法从您发布的代码中完全看出 DOM 结构是什么,但 ref 节点和新节点需要具有相同的父节点才能使用 insertBefore。如果他们不这样做,appendChild 可能会将图像插入为其父级的最后一个子级。
    猜你喜欢
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2021-11-27
    • 2020-09-09
    相关资源
    最近更新 更多