2011-07-03 122 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