У меня 5 кнопок и только 4 кнопки рядом друг с другом. Есть одна кнопка, которая находится в своем собственном div. Как я могу получить к нему доступ с помощью чего-то вроде prev()?
Вот пример кода:
<div>
<div>
<input type = "button" class = "test" value = "Test1">
</div>
<input type = "button" class = "test" value = "Test 2">
<input type = "button" class = "test" value = "Test 3">
<input type = "button" class = "test" value = "Test 4">
<input type = "button" class = "test" value = "Test 5">
</div>
<script>
$(".test").click(function() {
var value = $(this).prev().val();
alert(value);
});
</script>
Связь:https://jsfiddle.net/fzwqmyb4/3/
Когда я нажимаю «Тест 4», он показывает «Тест 3», что хорошо. Но когда я нажимаю кнопку «Тест 2», он должен показывать «Тест 1», но этого не происходит. Причина в том, что prev() работает только для братьев и сестер.
Но как я могу сделать динамический код, который обнаруживает предыдущее что-то, даже если оно находится в другом div?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете проверить, является ли предыдущий элемент входным или нет, если нет, найти дочерний элемент. Проверьте этот код:
$(".test").click(function(){
var prevElement = $(this).prev().get(0);
if (prevElement && prevElement.nodeName !== 'INPUT')
{
prevElement = $(prevElement).find('input').get(0);
}
var value = prevElement ? prevElement.value : '';
alert(value);
});
prev() находит только предыдущего брата. Чтобы найти вложенный элемент, вам нужно добавить еще немного логики в вашу функцию:
$(".test").click(function() {
var value;
var prevTagName = $(this).prev().prop("tagName");
switch(prevTagName)
{
case undefined:
value = "no previous siblings";
break;
case "INPUT":
value = $(this).prev().val();
break;
case "DIV":
value = $(this).closest("div").find("input").val();
break;
default:
value = "undefined";
break;
}
alert(value);
});<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<div>
<input type = "button" class = "test" value = "Test1">
</div>
<input type = "button" class = "test" value = "Test 2">
<input type = "button" class = "test" value = "Test 3">
<input type = "button" class = "test" value = "Test 4">
<input type = "button" class = "test" value = "Test 5">
</div>$("input.test").click(function() {
var index = $(this).index()
var prevval = $("input.test").eq(index - 1).val()
console.info(prevval)
});<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<div>
<input type = "button" class = "test" value = "Test1">
</div>
<input type = "button" class = "test" value = "Test 2">
<input type = "button" class = "test" value = "Test 3">
<input type = "button" class = "test" value = "Test 4">
<input type = "button" class = "test" value = "Test 5">
</div>
Как насчет того, чтобы использовать свойство html 'id'?