将Attr设置为最接近的<a> using src img</a>

时间:2014-06-10 15:47:49

标签: javascript jquery html

我知道这是一个非常基本的问题。我试图获得&#34; src&#34;作为变量并将其设置为最接近&#34; href&#34;。

小提琴: http://jsfiddle.net/vitorboccio/EUpRg/1/

HTML:

<div id="instafeed">
    <a href="javascript:void(0);">
        <img src="http://scontent-a.cdninstagram.com/hphotos-xaf1/t51.2885-15/915462_665185033531202_40962267_s.jpg" />
    </a>
    <a href="javascript:void(0);">
        <img src="http://scontent-b.cdninstagram.com/hphotos-xpf1/t51.2885-15/10299842_1424124577859264_383342252_s.jpg" />
    </a>
</div>

JS:

function changeURL () {
    //var srcImg = this.src;
    var srcImg = $(this).attr("src");
    console.log(srcImg);
    $("#instafeed").closest('a').attr('href', srcImg);
}

$("#instafeed").on('click', 'img', function () {
    changeURL();        
});

感谢

5 个答案:

答案 0 :(得分:2)

changeURL没有接收任何参数,也无法猜测你正在寻址什么图像。

试试这个

function changeURL (imgElement) {
    var srcImg = imgElement.attr("src");
    console.log(srcImg);
    imgElement.closest('a').attr('href', srcImg);
}

$("#instafeed").on('click', 'img', function () {
    changeURL(jQuery(this));        
});

答案 1 :(得分:1)

删除包含对changeURL的调用的匿名函数 - 它打破了jQuery的自动行为,将被调用函数中的this设置为被点击的元素:

$('#instafeed').on('click', 'img', changeURL);

然后,您还需要在处理程序中引用该被单击的元素,而不是#instafeed

function changeURL() {
    $(this).closest('a').prop('href', this.src);
 };

注意:我已将$(this).attr('src')更改为this.src。唯一的区别是后者将是一个完全限定的绝对URL,而前者可能是相对的。我还使用了.prop代替.attr设置属性,因为这是更简单的方法来更改元素的属性,因为jQuery 1.6

此外,如果<a>元素始终是直接祖先,那么最佳解决方案就是这样,通过直接DOM操作消除原始代码中对jQuery的所有五次调用:

function changeURL() {
    this.parentNode.href = this.src;
};

答案 2 :(得分:0)

查看代码后,我认为您正在尝试获取图像src并将其设置为最接近的<a>标记中的href。如果是,请从<a>

中找到最接近的<img>
function changeURL () {
    var srcImg = $(this).attr("src");
    console.log(srcImg);
    $(this).closest('a').attr('href', srcImg); 
    // the $(this) is referring to <img>
}

$("#instafeed").on('click', 'img', changeURL);

答案 3 :(得分:0)

我将JS更改为:

function changeURL () {
  var srcImg = $(this).attr("src");
  console.log(srcImg);
  $(this).closest('a').attr('href', srcImg);
}

$("#instafeed").on('click', 'img', changeURL);
  • 删除了围绕changeURL绑定的匿名函数,现在直接绑定到changeURL方法,从而保留this引用。
  • 更改.closest()来自img代码的#instafeed来电,而不是{{1}}

http://jsfiddle.net/EUpRg/3/

答案 4 :(得分:0)

你可以尝试

function changeURL (imgElement) {
    var srcImg = imgElement.attr("src");
    console.log(srcImg);

    $("#instafeed").find('a:eq(0)').prop('href', srcImg);
}

$("#instafeed").on('click', 'img', function () {

    changeURL($(this));        
});
[Demo][1]