2014-09-02 101 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