jquery $(this).prev(“。class”)不起作用

时间:2011-11-09 00:35:35

标签: jquery jquery-selectors

鉴于这个简单的设置

<div class="parent">
   <div class="child">I'm spoiled</div>
</div>
<div class="aunt"></div>
<div class="uncle"></div>

<div class="parent">
   <div class="child">I'm spoiled</div>
</div>
<div class="aunt"></div>
<div class="uncle"></div>

当我检测到“叔叔”课上的点击时,我想得到最近的“.parent”的兄弟姐妹。我应该可以做到

$( this ).prev( ".parent" ).children( ".child" ).text();

...但这会返回一个空白。

如果我这样做

$( this ).prev().prev().children( ".child" ).text();

...这会返回预期的结果:“我被宠坏了”

使用prev([选择器])是否存在一些限制?

[UPDATE]

.prevAll()返回所有previuos类,所以

的结果
$( this ).prevAll( ".parent" ).children( ".child" ).text();

如果我点击第二个“.uncle”,“我被宠坏了,我被宠坏了”,这不是我想要的结果。

我只需要最接近的前一个。

4 个答案:

答案 0 :(得分:10)

来自jquery文档:

  

.prev()描述:获取匹配元素集中每个元素的前一个兄弟,可选择由选择器过滤。

此外:

  

要选择所有前面的兄弟元素,而不仅仅是前面的相邻兄弟元素,请使用.prevAll()方法。

所以,你去了,改用.prevAll()方法。 http://api.jquery.com/prev/

答案 1 :(得分:3)

那是因为那不是以前的意图。你试图使用prev。方式.prevAll()应该有效。

编辑:

考虑到你的最新要求,我认为这样的事情会起作用:

$(this).prevUntil(".parent").first().prev().children( ".child" ).text()

答案 2 :(得分:1)

prev()仅返回第一个前一个元素。

<强>尝试:

$( this ).prevAll( ".parent:first" ).children( ".child" ).text();

答案 3 :(得分:-1)

这可能是更好的方式:

var this = $(this);
var.parent('.parent').prev().children('.children').text();