如何从特定元素获取图像src

时间:2015-11-02 13:21:35

标签: javascript jquery html css

我的示例 html 部分包含多个项目,如下所示:

<ul class="catalog">
  <li class="catalog_item catalog_item--default-view">
    <div class="catalog_item_image">
      <img src="/img/01.png" alt="model01" class="catalog_item_icons__big-foto">
   </div>
   <ul class="catalog_item_icons">
      <li class="catalog_item_icons__preview"><img src="/img/01-01.png" alt="01" class="catalog_item_icons__preview--foto-small"></li>
      <li class="catalog_item_icons__preview"><img src="/img/01-02.png" alt="02" class="catalog_item_icons__preview--foto-small"></li>
      <li class="catalog_item_icons__preview"><img src="/img/01-03.png" alt="03" class="catalog_item_icons__preview--foto-small"></li>
   </ul>

我想 更改 img.catalog_item_icons__big-foto 的src   同 src of img.catalog_item_icons__preview - foto-small

点击li元素仅在其父 ul.catalog中

这是我的尝试:

$(".catalog_item_icons__preview").each(function () {
  $(this).on("click", function() {
    console.log('Clicked preview!');
    // get image fileName
    var smallImagePath = $(this).children("img").attr("src");
    console.log("small image: " + smallImagePath);
    var $bigPreview = $(this).closest('img.catalog_item_icons__big-foto').attr("src");

    // print in console src of nearest big image
    console.log($bigPreview);

  });

});

我可以获得小图像的src,但是甚至无法在树中读取上面img的src。 控制台输出:未定义。不明白为什么:(

5 个答案:

答案 0 :(得分:2)

使用此脚本:

$(document).ready(function() {
    //It is executing a function when it is clicked on an item
    $('.catalog_item_icons li').click(function() {
        //Taking the source of the image of the clicked element.
        //with $('img', this) you are choosing the the image in the clicked element
        _src = $('img', this).attr('src');
        //In the next line I am assigning to the _obj variable - the parent .catalog_item--default-view of the clicked element
        _obj = $(this).parents('.catalog_item--default-view');
        //In the next line i am changing the source attribute of the .catalog_item_icons__big-foto located in the _obj object
        $('.catalog_item_icons__big-foto', _obj).attr('src', _src);
    });
});

答案 1 :(得分:0)

catalog_item_icons__big-foto不是直接的祖先,所以最接近的不会找到它。最接近的方法看着自己而不是看着父母。您正在寻找的元素不是父母,而是父母之一的孩子。

最简单的方法是寻找顶部的li并从那里找到图像。

$(this).closest(".catalog_item catalog_item--default-view")
    .find('img.catalog_item_icons__big-foto')

或选项是找到父ul并找到前一个兄弟,然后找到图像。

答案 2 :(得分:0)

问题在这里nearest()方法返回所选元素的第一个祖先。祖先是父,祖父母,曾祖父母等等。

 var $bigPreview = $(this).closest('img.catalog_item_icons__big-foto').attr("src");

你只需使用适合你的课程

 var $bigPreview = $('img.catalog_item_icons__big-foto').attr("src");

答案 3 :(得分:0)

这可能会对您有所帮助,请检查控制台以下代码是否适用于我

$("li.catalog_item_icons__preview").on("click", function(){
    // get image fileName
    var smallImagePath = $(this).children("img").attr("src");
    console.log("small image: " + smallImagePath);
    var bigPreview = $(this).parent('ul').siblings(".catalog_item_image").children(".catalog_item_icons__big-foto").attr("src");

    // print in console src of nearest big image
    console.log(bigPreview);
});

$("li.catalog_item_icons__preview").on("click", function(){
    // get image fileName
    var smallImagePath = $(this).children("img").attr("src");
    console.log("small image: " + smallImagePath);
    var bigPreview = $(this).parent('ul').siblings(".catalog_item_image").children(".catalog_item_icons__big-foto").attr("src");

    // print in console src of nearest big image
    console.log(bigPreview);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul class="catalog">
  <li class="catalog_item catalog_item--default-view">
    <div class="catalog_item_image">
      <img src="/img/01.png" alt="model01" class="catalog_item_icons__big-foto">
   </div>
   <ul class="catalog_item_icons">
      <li class="catalog_item_icons__preview"><img src="/img/01-01.png" alt="01" class="catalog_item_icons__preview--foto-small"></li>
      <li class="catalog_item_icons__preview"><img src="/img/01-02.png" alt="02" class="catalog_item_icons__preview--foto-small"></li>
      <li class="catalog_item_icons__preview"><img src="/img/01-03.png" alt="03" class="catalog_item_icons__preview--foto-small"></li>
   </ul>
  </li>
</ul>

答案 4 :(得分:0)

试试这个

&#13;
&#13;
$(".catalog_item_icons__preview").click(function() {
  $(".catalog_item_icons__big-foto").attr("src", $(this).children("img").attr("src"));
  console.log($(".catalog_item_icons__big-foto").attr("src"));
});
&#13;
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="catalog_item_image">
  <img src="/img/01.png" alt="model01" class="catalog_item_icons__big-foto">
</div>
<ul class="catalog_item_icons">
  <li class="catalog_item_icons__preview">
    <img src="/img/01-01.png" alt="01" class="catalog_item_icons__preview--foto-small">
  </li>
  <li class="catalog_item_icons__preview">
    <img src="/img/01-02.png" alt="02" class="catalog_item_icons__preview--foto-small">
  </li>
  <li class="catalog_item_icons__preview">
    <img src="/img/01-03.png" alt="03" class="catalog_item_icons__preview--foto-small">
  </li>
</ul>
&#13;
&#13;
&#13;