2011年4月3日日曜日

[jQuery]HTMLタグのidを動的に生成(or変更)する方法

例えば、Twitterの新しいつぶやき一つ一つにidがついていくが、JavaScriptでどうやってidを生成、変更しているのかという話。


jQueryのattr()を使う。

もし、idを'oldid'→'newid'に変更したいのなら、

$('#oldid').attr('id', 'newid');

とすれば良い。


しかし、もっと動的に、生成された番号などをid内に入れたいときなどは、

例えば、attr(function(i){...})を使う。

以下はClick meボタンを押すと新しいpタグが挿入されていき、TESTボタンをクリックすると、上から4番目のものの背景が赤になるというコード。

<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#button1").click(function(){
$("div.contents").prepend("<p>This is test.</p>");
$("p").attr("id",function(i){
return "num"+i;
});
});

$("#button2").click(function(){
$("p#num4").css("background-color","red");
});

});

</script>
</head>

<body>
<button id="button1">Click me</button>
<button id="button2">TEST</button>
<div class='contents'></div>
</body>
</html>


jQueryのattr()関数についてはここを参照。

2 件のコメント:

  1. とても参考になりました。一点だけわからないのですが、
    function(i){return "num"+i;}
    はなぜ「i」が勝手に増えるのでしょうか?

    返信削除
    返信
    1. $(指定の要素).attr(function(i){...})のiには、指定の要素が何番目であるかが入ります。なのでこの例だとiが増えているというより、prependによって増えてくpタグに上から順番に番号が振り直されています。

      削除