特定の文字列を含むIDを検索[javascript]

たとえば、hoge_1 / hoge_2 / hoge_3 …. hoge_n と特定の文字列「hoge」が必ず含まれている連番IDのボックスがあって、そいつらだけJavaScirptで操作したいなーという時の方法。

こんなHTMLがあったとする

<select id="page">
	<option value="1">1ページ目</option>
	<option value="2">2ページ目</option>
</select>

<select id="hoge_1">
	<option value="0">hoge</option>
	<option value="1">piyo</option>
</select>

<select id="hoge_2">
	<option value="0">hoge</option>
	<option value="1">piyo</option>
</select>

<select id="hoge_3">
	<option value="0">hoge</option>
	<option value="1">piyo</option>
</select>

一番上の id=”page” は表示しておいて、id=”hoge_n” は全て非表示にしたい!とかいう場面…けっこうある。と思う。たぶん。selectタグが全て id=”hoge_n” だったら、document.getElementsByTagName(‘select’) でタグ全てを取得すれば良いんだけど、そんなの非現実的だし、後から同じタグだけど別の役割を持たせているコードを入れた瞬間に正しく動作しなくなる。

じゃあマッチさせてみよう

というわけで、document.getElementsByTagName(‘select’) で全ての selectタグを取得した後、ID名が指定のもの(今回は hoge )にマッチするかどうかを判定すれば良い。

<script type="text/javascript">
window.onload = function(){
	var parents = 'hoge_';
	selectObj = document.getElementsByTagName('select');
	matchObj= new RegExp(parents);
	
	for(i=0; i < selectObj.length; i++){
		if(selectObj[i].id.match(matchObj)){
			selectObj[i].style.display = "none";
		}
	}
}
</script>

こうすれば selectタグの中の ID名に「hoge_」を含むものだけを style.display = “none” にできる。

逆に個別に指定して表示したい時は document.getElementById(‘hoge_1’).style.display = “inline” とすればできる。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください