Javascript 如何获取prev()而不仅仅是兄弟姐妹

Javascript 如何获取prev()而不仅仅是兄弟姐妹,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有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" cl

我有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>

$(“.test”)。单击(函数(){
var值=$(this.prev().val();
警报(值);
});
链接:

当我按下“测试4”时,它显示“测试3”,这很好。但当我按下按钮“测试2”时,它应该显示“测试1”,但它不显示。原因是
prev()
只适用于兄弟姐妹


但是,如何生成一个动态代码,即使在另一个div中也能检测到某个元素的前一个元素呢?

您可以检查前一个元素是否为输入,如果不是,则查找子元素。 检查以下代码:

$(".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”)。单击(函数(){
var值;
var prevTagName=$(this.prev().prop(“标记名”);
开关(前置标记名)
{
未定义的情况:
value=“没有以前的兄弟姐妹”;
打破
案例“输入”:
值=$(this.prev().val();
打破
案件“DIV”:
value=$(this.closest(“div”).find(“input”).val();
打破
违约:
value=“未定义”;
打破
}
警报(值);
});

  • 使用index,通过类测试获得当前单击元素的索引,然后减去1,得到具有相同类的前一个元素
  • $(“input.test”)。单击(函数(){
    var index=$(this.index())
    var prevval=$(“input.test”).eq(索引-1).val()
    console.log(prevval)
    });
    
    如果您使用html“id”属性如何?