Ответ 1
Try:
var tmp = $(this).siblings(":text").attr("name");
Метод closest()
, который вы используете, находит ближайшего предка, который вам не нужен.
У меня есть следующий код 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
.
Я пробовал с помощью jQuery followin, но он не работает:
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
плохой выбор?
Try:
var tmp = $(this).siblings(":text").attr("name");
Метод closest()
, который вы используете, находит ближайшего предка, который вам не нужен.
.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);
});
Вот ближайшая реализация, нацеленная на потомков вместо родителей:
$.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;
};