2011-07-03 67 views
1

我在產品圖片列表中添加了一個類,例如'productID_123',我希望從最後得到該號碼。我需要這個儘可能動態的圖像可能有不止一個類。這是我迄今放在一起,我覺得我幾乎有隻是想不通的IF:從類名獲得產品ID eg'productID_123'

$(".image").each(function(){ 

    var classList = $(this).attr('class').split(/\s+/); 

    $.each(classList, function(index, item){ 
     if (item === 'productID_') { 
      product_id = item.replace("productID_",""); 
      fetchProductImages(product_id,this.width,this.height); 
     } 
    }); 

}); 

也許我可以強制執行,這是返回的整數?

我不能使用data- *屬性,因爲頁面是用XHTML Strict編寫的,並且需要驗證。

+0

你'if'是一個確切* *匹配測試。如果您使用'.indexOf()'在字符串中查找'productID_',它就會起作用。 'if(item.indexOf('productID_')> -1){' – user113716

+0

兩者都可以很好地工作。哪個性能最好? 我是否也想過我需要在每個圖像之外聲明圖像。就像編輯過的例子。 –

+0

在這種情況下,我不會再考慮性能。如果我想猜*,我會說'.indexOf()',但是除非我們正在談論大量的數據,否則差異(如果有的話)是微不足道的。做哪一個對你更有意義。 – user113716

回答

5

你可以使用正則表達式:

$.each(classList, function(index, item){ 
    var matched = item.match(/^productID_(\d+)$/); 
    if (matched) { 
     var product_id = matched[1]; 
     fetchProductImages(product_id,this.width,this.height); 
    } 
}); 
+0

這是與Firebug導致JS錯誤。我註釋掉各條線和正則表達式是造成錯誤 錯誤:FBTrace沒有定義 源文件:鉻://firebug/content/tabWatcher.js 線:720 –

+1

@Pointy:你有你'.match( )'翻轉過來。這是'String'的一種方法。編輯:...修正。 ; o) – user113716

+1

好的 - 它是字符串中的「match()」和正則表達式中的「exec()」。這是我總是倒退的事情之一:-) – Pointy