jQueryを指定したので、ここに行きます:
$("h3").each(function() {
var me = $(this);
me.attr("id",me.text().toLowerCase().replace(/[^a-z0-9-]/g,'-').replace(/--+/g,'-'));
});
これにより、英数字以外のすべての文字が に置き換えられ-
、連続する複数の-
文字が削除されます。
プレーン JS の場合 (はるかに効率的):
(function() {
var tags = document.getElementsByTagName("h3"), l = tags.length, i;
for( i=0; i<l; i++) {
tags[i].id = tags[i].firstChild.nodeValue.toLowerCase().replace(/[^a-z0-9-]/g,'-').replace(/--+/g,'-');
}
})();
さらに良いことに、重複をチェックします。
(function() {
var tags = document.getElementsByTagName("h3"), l = tags.length, i, newid, n;
for( i=0; i<l; i++) {
newid = tags[i].firstChild.nodeValue.toLowerCase().replace(/[^a-z0-9-]/g,'-').replace(/--+/g,'-');
if( document.getElementById(newid)) {
n = 1;
do {n++;}
while(document.getElementById(newid+'-'+n));
newid += '-'+n;
}
tags[i].id = newid;
}
})();