<h3>Title 1</h3>
<div class="anything">Something</div>
<div class="anything">Multiple inputfields here... <input type="text" class="trigger"></div>
<h3>Title 2</h3>
<div class="anything">Something</div>
<div class="anything">Multiple inputfields here... <input type="text" class="trigger"></div>
如何在聚焦输入字段时获得标题?
我试过这个:
$('body').on('focus', '.trigger', function() {
var title = $(this).closest('.anything').prev('h3').text();
});
答案 0 :(得分:3)
这应该有效:
$('body').on('focus', '.trigger', function() {
var title = $(this).closest('.anything').prevAll('h3').eq(0).text();
});
答案 1 :(得分:1)
应该是:
var title = $(this).closest('.anything').prev().prev().text();
<强> See DEMO here. 强>
OR
var title = $(this).closest('.anything').prevAll('h3:first').text();
<强> See DEMO here. 强>
答案 2 :(得分:1)
jQuery nearest('X')方法查找最接近的X匹配父。 h3是你正在寻找的父母的兄弟姐妹。
你真正应该做的是将这些东西包装在像这样的元素中:
<div class="wrapper">
<h3>Title 1</h3>
<div class="anything">Something</div>
<div class="anything">Multiple inputfields here... <input type="text" class="trigger"/>
</div>
然后执行:
$(document).ready(function(){
$('.trigger').on('focus',function(){
alert($(this).closest('.wrapper').find('h3').text());
});
});
或如果您坚持保留结构:
对于HTML
<h3>Title 1</h3>
<div class="anything">Something</div>
<div class="anything">Multiple inputfields here... <input type="text" class="trigger"/></div>
使用以下行...
$(this).parent().prevAll('h3').eq(0).text();
或者对此你可以使用不那么漂亮(但正常工作)的jQuery:
$(this).parent().prev().prev().text();
答案 3 :(得分:0)
此处示例http://jsfiddle.net/tuL4vctr/
没有开箱即用的方法,但这是一个选项
$('body').on('focus', '.trigger', function() {
var title = $(this).closest('.anything').prev().prev('h3').text();
// Rest of your code
});
答案 4 :(得分:-1)
注意:prev()
返回FIRST上一个兄弟。如果你使用选择器进行过滤,那么它会过滤掉第一个兄弟,或者返回第一个兄弟,或者什么都没有。它不会搜索所有先前的兄弟姐妹,以查找与选择器匹配的第一个兄弟姐妹。
以下是等效的:
var h3_1 = $(this).prev("h3")
var h3_2 = $(this).prev().filter("h3")
在上面的示例中,上一个兄弟姐妹总是另一个<div>
,因此prev("h3")
永远不会返回任何内容。
要搜索所有以前的兄弟姐妹,您需要使用prevAll()
方法,然后过滤第一场比赛。
var title = $(this).closest(".anything").prevAll("h3:first").text();