2011-10-05 66 views

回答

3

遍歷圖像,並返回那些具有SRC財產以.png結尾:

var images = document.images; 
var pngs = []; 
for (var i=0, iLen=images.length; i<iLen; i++){ 
    if (/\.png$/i.test(images[i].src)) 
    pngs.push(images[i]); 
} 

PNG格式是其圖像陣列SRC以.png結束,將在工作幾乎每個支持腳本的瀏覽器。

如果你想要的東西,使用querySelectorAll(如果可用)和一個簡單的循環在圖像如果不是,那麼下面應該(每lonesomeday的ansewr)適合:

function getPngs() { 

    if (document.querySelectorAll) { 
    return document.querySelectorAll('img[src*=".png"]'); 
    } 

    var images = document.images; 
    var pngs = []; 
    var re = /\.png$/i; 
    for (var i=0, iLen=images.length; i<iLen; i++){ 
    if (re.test(images[i].src)) { 
     pngs.push(images[i]); 
    } 
    } 
    return pngs; 
} 

你可能會得到一個節點列表或數組,但如果你想要做的只是遍歷它,那就沒關係。否則,您需要將qSA fork的結果轉換爲一個數組,這是幾行代碼。

+0

感謝RobG,這將有助於跨瀏覽器工作,我測試了它,它工作得很好。 – RubyGladiator

+0

@RubyGladiator是的,它會工作。但是,它在瀏覽器中的速度遠遠低於我的版本,它們具有'querySelectorAll',因此最好先測試一下該版本是否工作。它也會更好地做'if(images [i] .src.substr(-4)==='.png')',這會比正則表達式更快。 – lonesomeday

+0

@lonesomeday - 不知道你的測試是什麼,但jsperf上的[this one](http://jsperf.com/qsavsloop)顯示了在我測試的每個瀏覽器中循環* document.images *的速度快得多。通常情況下,在簡單的循環中編寫更多的代碼比使用複雜函數的代碼更快,代碼更少。 – RobG

5

沒有安全的方法來做到這一點。瀏覽器不會在任何地方展示哪種類型的圖像已經被加載。此外,你甚至不能保證圖片的URL將有正確的文件擴展名,因爲http://example.com/some/image是一個非常有效的URL。

你可以使用一個近似「屬性包含」 CSS選擇器與querySelectorAll與支持它的瀏覽器:

var pngs = document.querySelectorAll('img[src*=".png"]'); 

那找到所有img元素與.png某處他們src屬性。請注意,這是容易受到誤報和漏報。

此方法在IE 7或更低版​​本中不起作用。

+0

優秀!!!它工作得很好......謝謝你! – RubyGladiator

+0

它也不會在IE 8中工作,但您也可以在[圖像集合]上迭代(http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-90379117 ),並在* src *屬性上使用正則表達式在沒有* querySelectorAll *支持的瀏覽器中執行相同的操作。一般來說,它可能會更快。 – RobG

+0

好吧,不一定是正則表達式:'String.prototype.indexOf'會正常工作。你可以自己做迭代,但它可能是最快和最容易使用爲這些目的而設計的Javascript庫... – lonesomeday