クリックすると、クリックされた要素のクラスを変更して、現在選択されているボタンであることをユーザーに明らかにするjavascriptとcssを使用してボタンを作成しようとしています。
ページには 4 つのボタンがあります。私はまだ4番目のものを実装していません。ブルート フォース コード (後で表示) は機能しています。
function selected_button(opCode){
switch(opCode){
case 1:
document.getElementById('button1').className += "selected";
document.getElementById('button2').className = document.getElementById("button2").className.replace( /(?:^|\s)selected(?!\S)/ , '' );
document.getElementById('button3').className = document.getElementById("button3").className.replace( /(?:^|\s)selected(?!\S)/ , '' );
document.getElementById('button4').className = document.getElementById("button4").className.replace( /(?:^|\s)selected(?!\S)/ , '' );
break;
case 2: //Really similar to case 1 but shifted numbers around
document.getElementById('button2').className += "selected";
document.getElementById('button1').className = document.getElementById("button1").className.replace( /(?:^|\s)selected(?!\S)/ , '' );
document.getElementById('button3').className = document.getElementById("button3").className.replace( /(?:^|\s)selected(?!\S)/ , '' );
document.getElementById('button4').className = document.getElementById("button4").className.replace( /(?:^|\s)selected(?!\S)/ , '' );
break;
default: //really similar to case 1 but shifted numbers around
document.getElementById('button3').className += "selected";
document.getElementById('button1').className = document.getElementById("button1").className.replace( /(?:^|\s)selected(?!\S)/ , '' );
document.getElementById('button2').className = document.getElementById("button2").className.replace( /(?:^|\s)selected(?!\S)/ , '' );
document.getElementById('button4').className = document.getElementById("button3").className.replace( /(?:^|\s)selected(?!\S)/ , '' );
}
}
これをより一般的な機能にしたいので、思いついたのは次のとおりです。
function general_selected(selected_elem_num, num_elem, elem_name, desired_class){
var i = 0;
for( i = 0; i < num_elem + 1; i++){ //dehighlights all options
document.getElementById(elem_name + i.toString()).className =
document.getElementById(elem_name + i.toString()).className.replace
( /(?:^|\s) *should be a parameter here* (?!\S)/ , '' );
/* code wrapped for readability - above is all one statement */
}
//highlights selected option
document.getElementById(elem_name + selected_elem_num).className
+= desired_class;
}
次の 2 つの関数呼び出しは実質的に同等です。
selected_button(1);
general_selected( 1, 4, 'button', 'selected');
私が抱えている2つの問題:
1) 目的のクラスをパラメーターとして正規表現に挿入する方法がわかりません。
2) for ループ内の非常に長いメソッドがエラーを引き起こしています。for ループ内のメソッドを次のように置き換えても同じエラーが発生するため、エラーは持続しているようです。
document.getElementByID(elem_name + i.toString()).className = desired_class;
このスレッドに基づいた大まかなコード: JavaScript で要素のクラスを変更する