gpt4 book ai didi

javascript - 更改标签类的调试方法

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:19 24 4
gpt4 key购买 nike

我正在尝试使用 javascript 和 css 制作一个按钮,当单击该按钮时,将更改被单击元素的类,以使用户清楚它是当前选定的按钮。

页面上有四个按钮。我还没有实现第四个。蛮力代码(显示之后)正在运行。

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;
}

下面两个函数调用实际上应该是等价的:

selected_button(1);
general_selected( 1, 4, 'button', 'selected');

我遇到的 2 个问题:

1) 我不知道如何将所需的类作为参数插入到正则表达式中。

2) for 循环中非常长的方法导致错误。该错误似乎一直存在,因为即使我将 for 循环中的方法替换为以下内容,我也会遇到相同的错误:

document.getElementByID(elem_name + i.toString()).className = desired_class;

代码松散地基于这个线程: Change an element's class with JavaScript

最佳答案

在根节点添加事件监听器并跟踪实际目标。

document.addEventListener('click', function(event){
var old = document.querySelector(".selected");
old.className = old.className.replace( /(?:^|\s)selected(?!\S)/ , '' );
event.target.className += " selected";
}, false);

关于javascript - 更改标签类的调试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10132890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com