我在文档中有很多span标记。我想要给出内部有“检查”文本的span元素id,它应该以0开头,如:fiddle
<span>not check</span>
<span>not check</span>
<span id="0">check</span>
<span id="1">check</span>
<span id="2">check</span>
<span>not check</span>
<span id="3">check</span>
<span id="4">check</span>
我的JavaScript代码如下:
$(function(){
$('span').each(function(i){
$(this).filter(function(){
if( $(this).text().trim()=='check'){
$(this).attr('id',i);
$(this).attr('class',$(this).index())
}
})
})
})
答案 0 :(得分:4)
首先过滤它们,然后然后设置它们的属性:
$('span').filter(function() {
return $.trim($(this).text()) === 'check';
}).attr('id', function(index) {
return index;
});
.index()
(以及回调的index
参数)是匹配元素集中元素的索引,这正是您要查找的内容。
答案 1 :(得分:4)
$('span').filter(function() {
return $(this).text().trim()=='check';
}).attr('id', function(i,oldVal) {
return i;
});
如果您只想设置.each()
,则不需要id
循环。首先过滤,然后将回调函数传递给.attr()
- 它将被调用每个项目并传递当前项目的从零开始的索引,这就是你想要的id值,所以只需返回它
答案 2 :(得分:1)
工作演示http://jsfiddle.net/Ugj5Z/3/
$(document).ready(function () {
$('span').filter(function () {
return $(this).text().trim() == 'check';
}).attr('id', function (i) {
return i;
});
});
答案 3 :(得分:0)
您可以使用此代码:
$(function(){
var lastIndex = 0;
$('span').each(function(){
$(this).filter(function(){
if( $(this).text().trim()=='check'){
$(this).attr('id',lastIndex++);
$(this).attr('class',$(this).index())
}
})
})
})
请参阅我的JSFiddle的分支:http://jsfiddle.net/Ugj5Z/1/
答案 4 :(得分:0)
使用闭包
$(function(){
var i = 0;
$('span').each(function(i){
$(this).filter(function(){
if( $(this).text().trim()=='check'){
$(this).attr('id',i++);
$(this).attr('class',$(this).index())
}
})
})
})