我有一个包含自动生成的HTML代码的页面,如下所示:
<span>
<img class="myimage" src="example.jpg"/>
<button onclick="do()">Do something</button>
</span>
<span>
<img class="myimage" src="example2.jpg"/>
<button onclick="do()">Do something</button>
</span>
我尝试了以下jquery代码来检索图像元素并存储在变量中,但它不起作用。有什么建议吗?
function do() {
var pic = $(this).parent().find(".myimage");
//do something
}
答案 0 :(得分:1)
函数this
内部指的是窗口对象。
为了使函数有效,每个按钮应该将this
(即自身)传递给函数。此外,正如评论中提到的 @ T.J.Crowder ,您不能将do
用作函数名称 - 它是reserved keyword。
<span>
<img class="myimage" src="example.jpg"/>
<button onclick="func(this)">Do something</button>
</span>
<span>
<img class="myimage" src="example2.jpg"/>
<button onclick="func(this)">Do something</button>
</span>
function func(ele) {
var pic = $(ele).parent().find(".myimage");
//do something
}
或者您可以在处理程序中使用jQuery click event处理程序,您可以使用this
来引用所单击的dom元素。
$('.myimage + button').click(function() {
var pic = $(this).parent().find(".myimage");
//do something
})
答案 1 :(得分:1)
有两个问题:
您不能拥有名为do
的功能; do
是一个关键字。
this
将是对全局对象的引用,而不是单击的按钮。
修复它:
更改功能名称。
使用on
之类的现代技术(然后this
将引用按钮)将其连接起来,或者更改onclick
属性以将this
传递到它并使用第一个参数。
以下是on
的示例:
$(".do-something-btn").on("click", function() {
var pic = $(this).parent().find(".myimage");
alert(pic.attr("src"));
});
<span>
<img class="myimage" src="example.jpg"/>
<button class="do-something-btn">Do something</button>
</span>
<span>
<img class="myimage" src="example2.jpg"/>
<button class="do-something-btn">Do something</button>
</span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
以下是将this
传递给函数的示例:
function doSomething(element) {
var pic = $(element).parent().find(".myimage");
alert(pic.attr("src"));
};
<span>
<img class="myimage" src="example.jpg"/>
<button onclick="doSomething(this)">Do something</button>
</span>
<span>
<img class="myimage" src="example2.jpg"/>
<button onclick="doSomething(this)">Do something</button>
</span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>