2014-09-02 110 views
0

以下是处理:我需要查找其他HTMLElements列表中的元素,以查找下一个具有“.wanted-class”类的元素。我在同一课程的其中一个元素中触发/捕获了一个click事件。我结束了一个解决方案,看起来像这样:如何从一个元素的nextAll()检索列表中检索attr值?

$('#id-element-0000').nextAll('.wanted-class'); 

这应该回到属于这一类属于一个我点击后的所有元素的列表。类似这样的:

<div class=​"wanted-class" id=​"id-element-1111" data-wanted=​"6127">​…​</div> 
<div class=​"wanted-class" id=​"id-element-2222" data-wanted=​"6128">​…​</div> 
<div class=​"wanted-class" id=​"id-element-3333" data-wanted=​"6129">​…​</div> 
<div class=​"wanted-class" id=​"id-element-4444" data-wanted=​"6130">​…​</div>​ 

但是,我只想要第一个。我不需要其他人。于是我想出了(又名:在谷歌找到),这是一个简单的解决方案:

$('#id-element-0000').nextAll('.wanted-class')[0]; 

这显然返回此:

<div class=​"wanted-class" id=​"id-element-1111" data-wanted=​"6127">​…​</div> 

这解决了first element问题。但是,我无法访问元素上的data-wanted属性。喜欢的东西:

$('#id-element-0000').nextAll('.wanted-class')[0].attr('data-wanted'); 

......或者......

$('#id-element-0000').nextAll('.wanted-class')[0].data('wanted'); 

...根本不工作。而且我似乎也无法将它变成一个变量。

问题:没有人知道如何从列表中的第一个元素检索data-wanted属性?

UPDATE 显然,这样做的更好的办法是使用next这一翻译的nextAll,但我已经从这个相同的类元素之间的其他元素。因此,next函数不适用于这种情况。而且,是...我已经尝试过了。

+2

当你在一个jQuery对象上使用'[number]'时,它返回DOM元素。它不再被jQuery包装。这就是为什么jQuery功能不起作用。 – Stryner 2014-09-02 17:03:01

+0

谢谢,@尼斯!我不知道。感谢您的启发! :D – 2014-09-02 17:10:29

回答

1

$()包裹,将其转换为jQuery对象:

$($('#id-element-0000').nextAll('.wanted-class')[0]).attr('data-wanted'); 

或者干脆用

$('#id-element-0000').nextAll('.wanted-class').first().attr('data-wanted'); 

当指数在jQuery的对象,你会得到HTMLElement不具有该方法jQuery有。

+0

最后一个工作就像一个魅力!你们真棒!谢啦! – 2014-09-02 17:05:46

+0

@DennisBraga很高兴帮助你... – 2014-09-02 17:06:44

0

您正在访问jQuery包装集中的第一个元素。你应该再次将其转换为jQuery对象,或.eq方法,该方法返回jQuery对象得到第一个项目:

$('#id-element-0000').nextAll('.wanted-class').eq(0).attr('data-wanted'); 

jsFiddle Demo