2012-09-30 62 views
0

什麼是要找到與類myClass的與位置比指定查找對象> X使用jquery

+0

你在尋找頂部>指定的第一個元素,還是頂部>指定的最高元素? –

+0

第一個元素,最重要的是性能,因爲我搜索所有包含跨度的單詞 – gruber

回答

1

錯誤(第一個答案):

var $elm = jQuery.each($('.myClass'), function() { 
    if ($(this).attr('top') > x) return $(this); 
}); 

var $elm; 
jQuery.each($('.myClass'), function() { 
    if ($(this).attr('top') > x) { 
     $elm = $(this); 
     return false; 
    } 
}); 

此解決方案不解析所有.myClass元素,只是返回第一個並停止。

+2

從[docs](http://api.jquery.com/jQuery.each/):「我們可以打破$ .each )通過使回調函數返回false來在特定的迭代循環,返回非false與for循環中的continue語句相同,它將立即跳到下一次迭代。 –

+0

該解決方案實際上根本不會返回任何(有用的)輸出。使用'jQuery.each',返回值總是與第一個參數集合相同。請記住'return'適用於你的內部函數,它只是像@anthony提到的那樣充當繼續/休息。嘗試使用['.each()'](http://api.jquery.com/each)代替外部變量。 – nbrooks

+0

我的錯誤,我專注於試圖限制迭代,並最終完全錯誤:) – Pandaiolo

4

濾波器的.myClass元件頂部更大的基於position頂部,然後在HTML文檔中第一個元素的最佳方式得到的第一個元素集合中:

var elem = $('.myClass').filter(function() { 
    return $(this).position().top > 200; 
}).first(); 

這將讓你的第一個元素的距離頂部內它含有上述200像素等元素要獲得相對於可以使用offset()而不是在文檔中的位置。

如果性能是一個問題,我想這是最快的:

var elems = document.getElementsByClassName('myClass'), elem; 
for (var i=0;i<elems.length;i++) { 
    if (parseInt(elems[i].style.top, 10)>200) { 
     elem=elems[i]; 
     break; 
    } 
}