从div中选择第一个图像

时间:2012-09-04 13:52:29

标签: javascript jquery

我有以下HTML。

<div>
   <img class="foo">
   <a href="#" onClick="changeImage(this, param1, param2)">sth</a>
</div>

我想在用户点击链接时更改图片类(删除foo,添加bar)。但是,我无法为jquery写下正确的选择器。

我也不确定我是否真的需要将this传递给函数。

function changeImage(link, param1, param2) {

    //Following line does not work
    $(link).parent('div img').removeClass("foo").addClass("bar");

}

6 个答案:

答案 0 :(得分:2)

你也不需要将-this-传递给你的onclick,我们甚至不会在函数中影响它,我们无论如何都可以抓住它。

function changeImage(link, param1, param2) {

    //Following line does not work
    //$(link).parent('div img').removeClass("foo").addClass("bar");

    $(this).closest('div').find('img').removeClass('foo').addClass('bar');
    return false; // stops the <a> link from doing anything else
}

旁注:尝试永远不要在任何DOM元素上使用任何onclick / onmouseover / etc事件,每个元素在旧版浏览器(IE)中单独创建一个脚本块,并在页面上有数百/数千个元素,它可能会降低性能。

使用.click().on(),无论您支持哪种版本的jQuery版本。

答案 1 :(得分:2)

你可以这样做

$(link).parent('div img:first').removeClass("foo").addClass("bar");

答案 2 :(得分:2)

假设您的标记仍然如您在问题中所示:

$(link).prev().removeClass("foo").addClass("bar");

.prev()方法将选择前一个兄弟,在您的情况下是img元素。

答案 3 :(得分:1)

试试这段代码:

   function changeImage(link, param1, param2) {
        $(this).closest('div').find('img:first').removeClass('foo').addClass('bar');
        return false;
    }

答案 4 :(得分:1)

$(link).prev('img').removeClass("foo").addClass("bar");

OR

$(link).siblings('img').removeClass("foo").addClass("bar");

答案 5 :(得分:0)

你可以试试这个

JS CODE

function changeImage(link, param1, param2) {
    $(link).siblings().removeClass('foo').addClass('bar');
}