Javascript 使用此关键字在jQuery中选择标记的特定元素

Javascript 使用此关键字在jQuery中选择标记的特定元素,javascript,jquery,html,Javascript,Jquery,Html,在jQuery中有一个prev()方法,它返回DOM中的前一个元素。但我的问题是,是否有可能使用$(this)关键字获取某个特定标记的前一个元素。我正在尝试$(this).prev()选择第三个元素,但它不起作用(至少在表单上是这样) 项目1 项目2 项目3 项目4 项目5 我假设您要选择第二项,如下所示。假设您有两个或三个跨度,并且您想要选择第二个跨度,您需要使用而不是。对于您的示例,让我向您展示一个工作片段: $(函数(){ $(“a”)。单击(函数(){ console.log($(t

在jQuery中有一个
prev()
方法,它返回DOM中的前一个元素。但我的问题是,是否有可能使用
$(this)
关键字获取某个特定标记的前一个元素。我正在尝试
$(this).prev()
选择第三个元素,但它不起作用(至少在表单上是这样)


项目1
项目2
项目3
项目4
项目5

我假设您要选择第二项,如下所示。假设您有两个或三个跨度,并且您想要选择第二个跨度,您需要使用而不是。对于您的示例,让我向您展示一个工作片段:

$(函数(){
$(“a”)。单击(函数(){
console.log($(this.prevAll(“span”).eq(3.text());/“第2项”
console.log($(this.prevAll(“.item”).eq(3.text());/“item 2”
console.log($(this.prevAll(“.item-2”).text());/“item 2”
});
});
div>*{display:block;}

项目1
项目2
项目3
项目4
项目5

如果您在这样的代码中使用序号位置,如果您更改DOM,它将中断。您不能按类名引用所需的项,例如
$(this).parent().find('.item-3')
?“它不工作”需要更多的信息。它是否返回null?它是否给出未定义的
错误$
?它是否返回一个空的jquery对象
$(this).prev().length==0
?它是否返回
项目5
?是否执行
$(this).prev(“.item-3”)
?(`因为这不起作用,如果是这样的话,我会解释原因)请解释@freedomn-m
.prev(“.class”)
将找到上一个项目,但只有当它匹配
class
-如果上一个项目不匹配,那么它不会返回任何内容-它只会查看上一个项目,直到找到一个项目为止,它不会继续查找。它是:
.prevAll().first().filter(.class”)
-大多数人都希望它能做到
.prevAll().filter(.class”).first()
-这是微妙的不同。作为一个警告,从文档中可以看出:元素以最接近的同级开始的顺序返回。所以,小心点,因为(例如)
.eq(1)
可能不是你所期望的。@freedmon-m是的,我认识这个老板。我应该包括它吗?只是把它添加到您已经完整的答案中,因为它不明显(我从来没有使用过.prevAll(class)(我会使用.prevAll().filter(class)),所以只需阅读一下如何使用class,当然,正如您所描述的那样。只是对订单有点惊讶,觉得值得一提。我猜.prevAll(class)[1]将给出与.prevAll()不同的元素。filter(class)[1]假设.eq是基于0的,有5项,.eq(2)将给出相同的值,无论你是从开始还是结束,也会混淆它的工作原理。@freedomn-m你已经很好地描述了它,您想编辑我的答案并添加它,以便人们可以从中受益吗?同时,他们会知道你添加了它,而不是我(只是想给你应得的学分)。@RokoC.Buljan Yep它的工作原理基本上是相反的!
<div>
  <span class="item item-1">Item 1</span>
  <span class="item item-2">Item 2</span>
  <span class="item item-3">Item 3</span>
  <span class="item item-4">Item 4</span>
  <span class="item item-5">Item 5</span>
  <a href="#">Click</a>
</div>