2013-07-17 70 views
0

我在文檔中有很多span標籤。我想給span元素ID已經「檢查」文本中,它應該與0像開始:fiddle使用jquery從0開始匹配元素ID

<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

所以,不要想從0設置ID ... N對於具有跨度標籤「檢查」爲文本? –

回答

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

,如果你只是想設置id你並不需要一個.each()循環。第一個過濾器,然後傳遞一個回調函數.attr() - 它將被調用每個項目,並通過當前項目的零基索引,這是方便,你想要的ID值,所以只是返回它。

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/

+1

那麼'.filter()'調用實際上在做什麼? – Blender

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()) 
      } 
     }) 
    }) 
}) 
+1

你能解釋一下你對'$(this).filter()'的調用嗎? – Blender

4

過濾他們的第一和然後設置其屬性:

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

.index()(以及index參數回調)是該元素的集合中匹配的元素的索引,這是你正在尋找的。

1

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

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