2012-01-08 115 views
0

嗨,我想用我想达到的一些建议。为每个div添加一个数字

目前,我有这样的:

<div class="thumbnail"> 
<img src="thumbnail_1.jpg" /> 
</div> 

对于每个.thumbnail我想前面加上索引号,跨度。实现此目的:

<div class="thumbnail"> 
<span class="index">001</span> 
<img src="thumbnail_1.jpg" /> 
</div> 

<div class="thumbnail"> 
<span class="index">002</span> 
<img src="thumbnail_2.jpg" /> 
</div> 

感谢堆。

+0

我认为到目前为止的答案是解决'class',但OP实际上是根据他们给出的输出在'img src'中谈论名字... – 2012-01-08 12:11:16

回答

1

随着其他解决方案,我更喜欢以下(个人口味)

$('div.thumbnail').prepend(function (index) { 
    index = '000' + (index + 1); 
    return '<span class=index>' + index.substr(index.length - 3) + '</span>'; 
}); 

prepend方法采用函数,该函数应返回要添加的html/DOM对象。请参阅docs

编辑:正如迈克尔·达兰特评论,你可能会想在imgsrc属性,而不是序列号的数字。如果是这种情况,应该包括以下内容。

$('div.thumbnail > img').before(function() { 
    var index = this.src.match(/\d+/); 
    if (index === null) return; 
    index = '000' + index; 
    return '<span class=index>' + index.substr(index.length - 3) + '</span>'; 
}); 

在这里,我们添加跨度beforeimg元素。有关更多信息,请参阅before documentation

+0

在上面的q上看到我的评论。 – 2012-01-08 12:15:50

+0

这是最容易理解的。我也试图自己做。什么是'index.substr'? – uriah 2012-01-08 12:36:57

+1

@MichaelDurrant,这可能是OP想要的,但如果是的话,我会等待OP对此发表评论。 @uriah,当我调用'index.substr'时,'index'是一个字符串。 'substr'是一个用于获取子串的字符串方法,第一个参数是开始索引,第二个是结束索引(选项,默认为字符串结尾)。 – 2012-01-08 14:05:24

2
$('div.thumbnail').each(function(i) { 
    var num = zeroPad(i + 1, 3); 
    $(this).prepend($('<span/>', { 
     'class': 'index', 
     'text': num 
    })); 
}); 

在元素和回调的.each()方法迭代接收元素的索引(从零开始) - 所以你有你的柜台。该元素本身可用作this(或作为第二个函数参数,但您并不需要)。 .prepend()将传递的元素/字符串插入元素的开头。

对于zeroPad函数,只需在Google或SO上搜索“pad number javascript”即可找到相当多的函数。 Here's一个例子:

function zeroPad(num, numZeros) { 
    var n = Math.abs(num); 
    var zeros = Math.max(0, numZeros - Math.floor(n).toString().length); 
    var zeroString = Math.pow(10,zeros).toString().substr(1); 
    if(num < 0) { 
     zeroString = '-' + zeroString; 
    } 
    return zeroString + n; 
} 
+0

+1(虽然更多解释会很好) 。 @uriah:将索引格式化为'001','002'等(相当合理),作为读者的练习。 :-) – 2012-01-08 12:01:00

+0

... 1 2'不会解决'img src' – 2012-01-08 12:13:55

1

试试这个:

$('.thumbnail').each(function(index) { 
    $('<span/>', { 
     'class': 'index', 
     text: "%03d".sprintf(index + 1) 
    }).prependTo(this); 
}); 

注意,它不会增加前导零,因为是。

我喜欢JSXT String.js模块,这将允许你写"%03d".sprintf(index + 1)

工作演示在http://jsfiddle.net/SqQcs/1/

编辑代码已经从第一次尝试改变 - 忘了$(<tag>, { ... })语法只适用于jQuery的构造器的工作原理,而不是在广义的jQuery参数的情况下。

+0

至少在最近的jQuery版本中,您需要''class''而不是'className' – ThiefMaster 2012-01-08 12:01:11

+0

这是否需要结束跨度? – 2012-01-08 12:01:50

+1

@MichaelDurrant不,jQuery会自己添加它 – Alnitak 2012-01-08 12:02:35

1

您可以选择所有具有缩略图类的元素,循环它们,并为每个包含索引的元素添加一个范围。

// Select all elements with class .thumbnail and loop over them 
$(".thumbnail").each(function(i, elm) { 
    // Prepend a index span to each element 
    $(elm).prepend('<span class="index">' + i + '</span>"); 
}); 

在这种情况下,索引将被编号为零。如果你喜欢该指数从1开始,您可以更改中间行这样:$(elm).prepend('<span class="index">' + (i + 1) + '</span>");

+1

尽管使用'this'是'.each()'中最常用的方法。 – ThiefMaster 2012-01-08 12:03:35

+0

@ThiefMaster同意,但我认为这样的例子会更明显。更容易理解。 – 2012-01-08 12:14:23

+0

现在意识到这个地址'class'不是'img src' – 2012-01-08 12:14:39