使用jquery以0开始匹配的元素id

时间:2013-07-17 08:55:53

标签: jquery html

我在文档中有很多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())
            }
        })
    })
})

5 个答案:

答案 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())
            }
        })
    })
})