0

I have lots of span tags in the document. I want give span element id which has "check" text inside and it should start with 0 like: 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>

My JavaScript code is as follows:

$(function(){
    $('span').each(function(i){
        $(this).filter(function(){
            if( $(this).text().trim()=='check'){
                $(this).attr('id',i);
                $(this).attr('class',$(this).index())
            }
        })
    })
})
4

5 回答 5

4

先过滤它们,然后设置它们的属性:

$('span').filter(function() {
    return $.trim($(this).text()) === 'check';
}).attr('id', function(index) {
    return index;
});

.index()(以及index回调的参数)是匹配元素集中元素的索引,这就是您要查找的内容。

于 2013-07-17T09:02:01.617 回答
4
$('span').filter(function() {
    return $(this).text().trim()=='check';
}).attr('id', function(i,oldVal) {
    return i;
});

如果您.each()只想设置id. 首先过滤器,然后将回调函数传递给.attr()- 它将为每个项目调用并传递当前项目的从零开始的索引,即方便地,您想要的 id 值,所以只需返回它。

于 2013-07-17T09:02:51.423 回答
1

工作演示 http://jsfiddle.net/Ugj5Z/3/

$(document).ready(function () {
    $('span').filter(function () {
        return $(this).text().trim() == 'check';
    }).attr('id', function (i) {
        return i;
    });
});
于 2013-07-17T09:07:25.613 回答
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/

于 2013-07-17T09:00:45.053 回答
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())
            }
        })
    })
})
于 2013-07-17T09:01:55.320 回答