我有以下HTML代码:
<td>
<input type="text" size="40" value="" name="related_image" id="related_image">
<input type="button" class="button addImage" value="Get image url">
</td>
<td>
<input type="text" size="40" value="" name="alternative_image" id="alternative_image">
<input type="button" class="button addImage" value="Get image url">
</td>
我需要弄清楚我点击了哪个按钮,然后在最近的输入文本字段中添加一些文字
例如。如果我点击第一个<td>
中的按钮,则需要在related_image
文本字段中输入一些文字。
我已尝试使用followin jQuery,但它不起作用:
jQuery('.addImage').click(function() {
var tmp = jQuery(this).closest("input[type=text]").attr('name');
alert(tmp);
});
(我只是检索输入名称以进行测试。)
我想我可能需要使用find
和/或siblings
。但我不太清楚如何。
任何帮助表示感谢。
修改
我刚设法使用此代码
addImageEvent = jQuery(this).prevAll("input[type=text]:first")
使用prevAll
是一个糟糕的选择吗?
答案 0 :(得分:26)
尝试:
var tmp = $(this).siblings(":text").attr("name");
您正在使用的closest()
方法找到最近的祖先,这不是您想要的。
答案 1 :(得分:5)
.closest()
找到父母,在这种情况下,您需要.siblings()
,如下所示:
jQuery('.addImage').click(function() {
var tmp = jQuery(this).siblings("input[type=text]").attr('name');
alert(tmp);
});
或者,如果格式始终与您的示例一致,请使用.prev()
,如下所示:
jQuery('.addImage').click(function() {
var tmp = jQuery(this).prev().attr('name');
alert(tmp);
});
答案 2 :(得分:3)
这是一个'最接近'的实现,旨在代替后代而不是父母:
$.fn.nearest = function(selector) {
var nearest, node = this, distance = 10000;
node.find(selector).each(function(){
var n = $(this),
d = n.parentsUntil(node).size();
if (d < distance) {
distance = d;
nearest = n;
} else if (d == distance) {
nearest.add(this);
}
});
return nearest;
};