使用普通javascript在每个图像之后使用特定类插入元素

时间:2017-08-26 18:41:33

标签: javascript html dom web-frontend

我基本上尝试使用普通的javascript在每个img元素下面添加一个标题img-caption的标题。我找到了一些解决方案,但他们都使用jQuery,我正在寻找一个简单的JavaScript解决方案。

我现在拥有的是这个非工作代码(从this question修改):

//insertAfter() needs to be updated
function insertAfter(referenceNode, newNode) {
  referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}

function inserCaption() {
  
  var imgs = document.getElementsByTagName("img");

  for (var i = 0; i < imgs.length; i++) {
    var NewSpan = document.createElement("span");
    var Caption = document.getElementsByTagName("img")[i].getAttribute("title");
    NewSpan.innerHTML = Caption;
    var ImgTag = document.getElementsByTagName("img");
    //I need a function inserAfter() to insert the titles after each image
    insertAfter(ImgTag, NewSpan);
  }
}
<img title="Hi" class="img-caption" src="http://i.imgur.com/KnX16nj.png"/>

<img title="Hello" class="img-caption" style="height:126px; width: auto;" src="http://i.imgur.com/naajTCH.png"/>

<button style="display:blocK" onclick="inserCaption()">Display Image Title</button>

到目前为止,我已经能够选择所有img个元素并获得他们的title属性。我缺少的是选择具有特定类名img的{​​{1}}和更重要的是,如何在每个之后实际插入相应的 img-caption 属性< / strong> title 作为 img 元素。

由于我只修改了现有的作品,所以我真的不知道span是如何工作的。对于javascript来说,我不是一个初学者,只是为了澄清。

3 个答案:

答案 0 :(得分:1)

function insertAfter(target, node) {
    let parent = target.parentNode;
    if(target.nextSibling !== null)
        parent.insertBefore(target.nextSibling, node);
    else
        parent.appendChild(node);
}

答案 1 :(得分:1)

您可以使用querySelectorAll以与jQuery相同的方式查找具有特定标记和类的元素:

var imgs = document.querySelectorAll("img.img-caption");

我也改变了:

insertAfter(imgs[i], NewSpan);

//insertAfter() needs to be updated
function insertAfter(referenceNode, newNode) {
  referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}

function inserCaption() {
  var imgs = document.querySelectorAll("img.img-caption");

  for (var i = 0; i < imgs.length; i++) {
    var NewSpan = document.createElement("span");
    var Caption = imgs[i].getAttribute("title");
    NewSpan.innerHTML = Caption;
    
    insertAfter(imgs[i], NewSpan);
  }
}
<img title="Hi" class="img-caption" src="http://i.imgur.com/KnX16nj.png" />

<img title="Hello" class="img-caption" style="height:126px; width: auto;" src="http://i.imgur.com/naajTCH.png" />

<button style="display:blocK" onclick="inserCaption()">Display Image Title</button>

答案 2 :(得分:0)

&#13;
&#13;
function applyCaption(image, index) {
  const caption = document.createElement('span');
  
  caption.classList.add('caption');
  caption.textContent = image.title;

  
  return image
    .parentNode
    .insertBefore(caption, image.nextSibling)
  ;
}

function inserCaption() {
  
  return Array
    .prototype
    .forEach
    .call(document.querySelectorAll('img'), applyCaption)
  ;
}
&#13;
<button style="display:blocK" onclick="inserCaption()">Display Image Title</button>
<hr />

<img title="Hi" class="img-caption" src="http://i.imgur.com/KnX16nj.png"/>
<img title="Hello" class="img-caption" style="height:126px; width: auto;" src="http://i.imgur.com/naajTCH.png"/>
&#13;
&#13;
&#13;