鉴于这个简单的设置
<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”,“我被宠坏了,我被宠坏了”,这不是我想要的结果。
我只需要最接近的前一个。
答案 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();