获取最接近的title元素

时间:2014-10-14 09:06:27

标签: jquery

<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();
});

5 个答案:

答案 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());
    });
});

如果您坚持保留结构:

这是jsFiddle Demo

对于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();