Home > Enterprise >  How can I automatically add an image's "alt" attribute using the image's filenam
How can I automatically add an image's "alt" attribute using the image's filenam

Time:01-29

I would like the "alt" to be displayed when hovering over the image. Everything works fine, except that although the photo has "alt" without the "-" and ".jpg" signs, the "alt" of the photo is displayed with these signs. When I edit these codes in "codepen" everything works ok but after uploading the codes to the page they don't work as they should.The CSS code is ok. It's about helping with JS.

<img  src="https://photoooo777.com/Some-Photo.jpg" alt="Some Photo" width="200" height="300">
<p >Some-Photo.jpg</p>
$(".img").wrap('<div />');
$(".img").each(function () {
  $(this).after('<p >'   $(this).attr("alt")   "</p>");
});

$(document).ready(function () {
  $("img").each(function () {
    var $img = $(this);
    var filename = $img.attr("src");
    if (typeof attr == typeof undefined || attr == false) {
      var altText = filename.substring(
        filename.lastIndexOf("/")   1,
        filename.lastIndexOf(".")
      );
      altText = altText.replace("-", " ").replace(".jpg", "");
      $img.attr("alt", altText);
    }
  });
});

Please help me edit these codes so that the name is displayed on hover, e.g. "Some Photo" instead of "Some-Photo.jpg".

CodePudding user response:

You can remove the line where you are setting the alt attribute of the image to the file name by removing this line:

$img.attr("alt", altText);

Also you don't need to wrap the images in a div with class alt-wrap and add a new p element with class alt after the image.

Instead, you can use the title attribute to show the text on hover over image. You can set the title attribute to the same value as the alt attribute on each image:

$("img").each(function () {
    var $img = $(this);
    var altText = $img.attr("alt");
    $img.attr("title", altText);
});

This way you don't need to create any new elements and you can remove the wrapping and the p element.

CodePudding user response:

My entire code looks like this:

$(".img").wrap('<div />');
$(".img").each(function () {
  $(this).after('<p >'   $(this).attr("alt")   "</p>");
});

$(document).ready(function () {
  $("img").each(function () {
    var $img = $(this);
    var filename = $img.attr("src");
    if (typeof attr == typeof undefined || attr == false) {
      var altText = filename.substring(
        filename.lastIndexOf("/")   1,
        filename.lastIndexOf(".")
      );
      altText = altText.replace("-", " ").replace(".jpg", "");
      $img.attr("alt", altText);
    }
  });
});
.img2 { 
    max-width: 100%; 
    height: 100%;
    margin: 0; 
    padding: 0px;
    column-count: max-width;
    background-color: white;
  }

  .img-wrap {
    display: flex;
    flex-wrap: wrap;
    flex-direction: row;
    justify-content: space-around;
  }

  .img { 
    display: block; 
}

    .alt-wrap { 
      display: block;
      position: relative;
      margin: 20px;
      color: whitesmoke;
      border: 5px solid transparent;
     border-image:   linear-gradient(to right, green 25%, yellow 25%, yellow 50%,red 50%, red 75%, magenta 75%) 5;
    }

    .alt-wrap p.alt {
      position: absolute;
      opacity: 0; /* hide initially */
      left: 0; right: 0; bottom: 0;
      margin: 0;
      padding: 15px;
      font-size: 14px;
      line-height: 22px;
      background-color: transparent;
      transition: all 10ms linear;
      transition-delay: 300ms;
      text-align: center;
    }

    .alt-wrap:hover > p.alt { 
      opacity: 1; 
      transition-delay: 0s;
      text-align: center;
      font-weight: 900;
      color: white;
      font-size: 150%;
      border: 20px solid transparent;
      margin-left: 1%;
      margin-right: 1%;
      text-shadow: 0 0 10px black;
    }
<div ><div ><div ><img  src="https://cdn.pixabay.com/photo/2015/04/19/08/32/marguerite-729510__340.jpg" alt="Some Photo" width="200" height="300">

I would like "alt" to be displayed after hovering the cursor, but without "-" and ".jpg" Sorry, I'm new to programming :)

  • Related