2012-07-16 73 views
0

我知道您使用attr方法来获取匹配集中的第一项的属性,例如, $('input').attr('name')为您提供了第一个匹配输入元素的名称属性。使用jQuery,如何获取HTML元素的属性,即不是匹配集的第一个元素?

但是,如何直接从HTML元素获取属性,例如$('input')[0]?我想要做一些像$('input')[0].attr('name')但这不起作用,因为attr只是jQuery匹配集的一种方法,而不是匹配集内的项目。

(顺便说一句,这已经来临,因为我想从匹配集内通过项目的功能,并能够看到函数中该项目的属性。)

+1

$($( '输入' )[0])。attr('name') – jeschafe 2012-07-16 21:21:42

+2

@jeschafe这是多余的,你不需要额外的'$()' – 2012-07-16 21:27:46

+0

@ RokoC.Buljan是的但是如果你想选择set中的第二个元素say,$ $('input')[2])。attr('name')然后它不是。只是给他一个与他自己相关的例子。 – jeschafe 2012-07-16 21:51:17

回答

3

如果通过[0]你只是想从一个匹配的集合获取特定的元素,使用eq()

$(selector).eq(0).attr('name'); 

将获得第一个元素的name属性由selector返回的集合中。当然,0可以被该选择器返回的任何元素的索引号替换。

同样,你可以使用:eq()选择:

$('div:eq(0)').attr('name'); 

或者,如果selector是一个变量:

$(selector + ':eq(0)').attr('name'); 

由于参宿一指出,在下面的意见:

如果您要使用eq,请使用.eq(n)而不是:eq(n),以便浏览器可以使用querySelectorAll() - 后者是一个jQuery扩展。

当然,你可以,某些名称或属性,只是回落到DOM方法:

$(selector)[0].name; 

或者:

$(selector)[0].getAttribute('name'); 

参考文献:

+0

如果您打算使用'eq',请使用'.eq(n)'而不是':eq(n)',以便浏览器可以使用'querySelectorAll' - 后者是一个jQuery扩展。 – Alnitak 2012-07-16 21:37:12

+0

是的,我应该澄清/指定,真的。 *编辑*和谢谢! =) – 2012-07-16 21:37:54

+0

谢谢你这么全面和多方面的答案! – Ghopper21 2012-07-16 22:46:50

1

当你有一个实际的HTML对象,您仍可以通过在$(元素),其包装jQuery的国际预科,然后有机会获得ATTR()

var secondThing = $('input')[1] 
foo(secondThing) 

function foo(element){ 
var elem = $(element); 
var name = elem.attr('name'); 

//or 
name = element.getAttribute('name') 

} 
+0

这是非常低效的。如果你有一个实际的** DOM **对象,当你可以的时候就使用它的本地DOM方法。 – Alnitak 2012-07-16 21:43:49

+0

@Alnitak增加了另外一种方式,但是从这个问题来看,他听起来像是想用jQuery的attr():“我想做一些像$('input')[0] .attr('name')但这是行不通的“ – MStodd 2012-07-16 22:10:24

+0

谢谢 - 很高兴知道我可以像这样的jQuery-ify元素。 – Ghopper21 2012-07-16 22:47:34

相关问题