2012-10-11 23 views
2

我使用的HTML代码如下事件元素的HTML元素的值:如何获得接近触发

 <label style="display:inline;">Information</label> 
    <a id="eventtrigger" >Click</a> 

和jQuery如下:

$("#eventtrigger").click(function(event){ 
     //event handling process 
     }); 

我想以获取靠近元素触发器事件的标签的值。
这意味着我应该得到值“信息”里面的jquery事件处理过程“没有使用任何特定的选择器,如ID或类”。

回答

5

您可以使用prev来获取上一个元素。

Live Demo

$("#eventtrigger").click(function(event){ 
    alert($(this).prev().text()); 
    }); 

或专门针对以前的标签看

$("#eventtrigger").click(function(event){ 
    alert($(this).prev('label').text()); 
}); 
+0

我会简单地用'.prev',而不是'.prev( '标签')' –

+0

@Vega如果链接和标签之间存在什么内容,该怎么办?在这个例子中没有,但可能存在于现实世界中。 – Archer

+0

@Archer那么如果布局是这样的,那么你不需要额外的支票吗? –

2

使用.prev()

$("#eventtrigger").click(function(event){ 
    $(this).prev('label').text(); 
}); 

您也可以使用.siblings()方法

$("#eventtrigger").click(function(event){ 
    alert($(this).siblings('label').text()); 
    });​ 

Check FIDDLE

1

如果你的HTML总是看起来像,然后用@阿迪尔的方法去。但是,如果您需要更具动态性,请使用.siblings(),只需抓住.first()即可,这将是“最接近的”。

例如,你可以考虑这样的:

// The following will grab the closest label to any a tag clicked on 
$("a").on("click", function(e) { 
    var closest = $(this).siblings("label").first(); 
    console.log(closest); 
}): 

不过,我认为这会抢后的第一个如果在它的每侧面的标签,如果是不希望出现的情况,并且您以前需要第一个标签(例如,您可能在标签前有多个标签和p标签),您需要的东西超出.prev(),因为.prev()只会抓取a标签前的FIRST元素。在这种情况下,请使用.prevAll().first()结合得到a标签前面提到的第一个标签。

这样:

$("a").on("click", function(e) { 
    var closest = $(this).prevAll("label").first(); 
    console.log(closest); 
}): 

课程相反的情况,并且可以使用.nextAll()

$("a").on("click", function(e) { 
    var closest = $(this).nextAll("label").first(); 
    console.log(closest); 
}):