代码之家  ›  专栏  ›  技术社区  ›  Federico

在div中显示img ALT文本

  •  0
  • Federico  · 技术社区  · 6 年前

    img alt 内部表演 div . 问题是它不会每次都更新 img 改变。

    有什么不同吗 addEventListener 我可以使用它来改变屏幕上每个可见图像的alt值,而不需要点击?

    var myImage = document.getElementsByTagName("img");
    var text = document.getElementById("show");
    
    for (var i = 0; i < myImage.length; i++) {
        myImage[i].addEventListener('click',show);
    }
    
    function show(){
        var myAlt = this.alt;
        text.innerHTML = myAlt;
    }
    

    提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  0
  •   connexo    6 年前

    为什么不在HTML准备好后就直接迭代图像呢?只需将一个侦听器附加到 DOMContentLoaded 事件:

    document.addEventListener('DOMContentLoaded', () => {
      let images = [...document.querySelectorAll('img[alt]')]
    
      for (const image of images) {
        const altDiv = document.createElement('div')
        altDiv.textContent = image.getAttribute('alt')
        image.parentNode.appendChild(altDiv)
      }
    })
    <div>
      <img src="http://lorempixel.com/200/200/" alt="my beautiful alt text" />
    </div>
    
    <div>
      <img src="http://lorempixel.com/200/100/" alt="my beautiful alt text 2" />
    </div>

    如果要确保在显示alt文本之前加载图像,请在 load

    document.addEventListener('DOMContentLoaded', () => {
    
      let images = [...document.querySelectorAll('img[alt]')]
    
      for (const image of images) {
        image.addEventListener('load', (e) => {
          const altDiv = document.createElement('div')
          altDiv.textContent = image.getAttribute('alt')
          image.parentNode.appendChild(altDiv)
        })
      }
    
    })
    <div>
      <img src="http://lorempixel.com/200/200/" alt="my beautiful alt text" />
    </div>
    
    <div>
      <img src="http://lorempixel.com/100/200/" alt="my beautiful alt text 2" />
    </div>
    
    <div>
      <img src="http://lorempixel.com/200/100/" alt="my beautiful alt text 3" />
    </div>