html的class样式增加或移除(例子模拟input输入框未填写的标红)

本文通过实例介绍了如何使用JavaScript动态管理HTML input元素的class,实现输入框未填写时显示红框错误提示。在提交时,正确填写的input将移除错误样式。关键在于保存要移除样式的元素并单独处理,避免因class数组动态变化导致的样式移除不全问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天研究了为input框添加红色提示框的class样式,但是加上去容易,当通过getElementsByClass获取到了所有添加了红框样式的元素,发现不能直接用replace对改class数组进行移除样式操作,研究了才发现,可以把元素存起来然后在进行样式的移除操作,具体还是通过下面的例子来演示吧,先上效果图:

1、只输入了姓名,然后点击校验,发现为空的加入红框样式:

2、把性别和年龄写上后,点击提交,填写了东西的input将会取消掉红框样式(校验也可以取消掉,只是用的方法不一样)

 

 

接下来上代码:

一、html的主体元素:

 <div style = "margin-top:180px; padding-left: 100px; padding-right:100px;">
     姓名:<input id = "testA" class = "inpt "> </input><br>
     性别:<input id = "testB" class = "inpt "> </input><br>
     年龄:<input id = "testC" class = "inpt "> </input><br>
     爱好:<input id = "testD" class = "inpt "> </input><br>
     备注:<input id = "testE" class = "inpt "> </input><br><br>
     <input type ="button" value = "校验" onclick = "checkNotInputField()"/> &nbsp;&nbsp;
     <input type = "button" value=" 提交" onclick = "submitFadeRedInput()"/> 
  </div>

二、校验方法(添加入JS中):

  function checkNotInputField(){
      addRedInputorNot(document.getElementById("testA"));
      addRedInputorNot(document.getElementById("testB"));
      addRedInputorNot(document.getElementById("testC"));
      addRedInputorNot(document.getElementById("testD"));
      addRedInputorNot(document.getElementById("testE"));
  };
  function addRedInputorNot(check_Var){
           var check_Value = check_Var ? check_Var.value : ""
            console.log("addRedInpuorNot_EK-check_Value:"+check_Value);
            if(check_Value == ""){
                //加红框样式,原来有的要先去除然后在加上,不然会有重复很多个
                check_Var.className = check_Var.className.replace(/x-red-field-invalid/,"");
                check_Var.className += " x-red-field-invalid";

            }else{
                //取消红框样式
                check_Var.className = check_Var.className.replace(/x-red-field-invalid/,"");
            }
  }

三、提交方法(添加入JS中):标红色的重要部分,很多人的不会先把要去除样式的元素提取出来,而是直接用在for语句中就移除样式:elements_class[j].className = elements_class[j].className.replace(/x-red-field-invalid/,"");

最后会发现虽然能移除,但是移除的居然不全,可能有些input被移除了,有些却没有移除,原因就是这个class数组是动态变化的,可以在for语句里面打印,控制台输出看结果。

  function submitFadeRedInput(){
      var elements_class = document.getElementsByClassName("x-red-field-invalid");
      var varsArray = new Array();
      var j = 0;
            for(var i=0;i<elements_class.length;i++){
                console.log("elements_class ["+i+"] = "+elements_class[i].value);
                if(elements_class[i].value != ""){
                    varsArray[j] = elements_class[i];
                    j++;
                }
            }
             for(j = 0;j < varsArray.length;j++){
                 console.log("strings = "+varsArray.length+",index = "+j)
                 varsArray[j].className = varsArray[j].className.replace(/x-red-field-invalid/,"");
            }
  }

四、样式:

<style>
.x-red-field-invalid{
    outline:#F00 double 1px;
}
.inpt{border:none;border-bottom:1px solid #000;}

</style>

 

 

 

 

<think>好的,用户现在问的是“input class”,我需要先弄清楚他们的具体需求是什么。之前的对话中,用户询问了关于Selenium操作时间控件的问题,现在可能是在继续探讨相关的HTML元素者自动化测试中的定位方法。 首先,“input class”可能指的是HTMLinput元素的class属性。用户可能想知道如何通过class属性来定位操作input元素,尤其是在使用Selenium进行自动化测试时。例如,他们可能在网页中遇到带有特定class输入框,想知道如何用Selenium找到并操作这些元素。 接下来,我需要考虑用户的使用场景。用户可能是一个测试工程师者开发人员,正在编写自动化测试脚本,遇到了需要处理带有class属性的input元素的情况。他们可能需要了解不同的定位方法,比如通过class name、CSS选择器XPath来定位元素。 用户可能的需求包括: 1. 如何通过class属性定位input元素。 2. 使用Selenium的不同方法(find_element_by_class_name,CSS选择器等)的示例。 3. 处理多个class的情况,者动态生成的class名称。 4. 可能遇到的常见问题,比如复合类名、元素不可见需要等待的情况。 需要确认用户是否了解HTML基础,比如class属性的作用,以及如何在Selenium中使用这些属性进行元素定位。之前的回答已经介绍了直接输入、点击选择、JavaScript修改等方法,现在可能需要补充关于class定位的具体内容。 另外,用户可能在实际操作中遇到了问题,比如无法正确通过class定位元素,者页面中有多个相同class的元素导致定位失败。这时候需要给出如何处理这些情况的建议,比如使用索引、结合其他属性,者使用更复杂的CSS选择器。 最后,要确保回答清晰,分点说明,提供代码示例,并提醒注意事项,比如类名的空格分隔问题,者动态加载元素可能需要显式等待。这样用户能够全面理解如何利用input元素的class属性进行有效的元素定位和操作。</think>在 HTML 和 Web 自动化测试(如 Selenium)中,`input` 元素的 `class` 属性是常用的定位和操作元素的识符。以下是关于 `input class` 的关键知识点和操作示例: --- ### **1. `class` 属性的作用** - **HTML 定义**:`class` 是 HTML 元素的通用属性,用于定义元素的 CSS 类名,可关联样式 JavaScript 行为。 - **示例**: ```html <input type="text" class="username-input form-control" placeholder="输入用户名"> ``` --- ### **2. 通过 `class` 定位元素** 在 Selenium 中,可通过以下方式定位带有 `class` 属性的 `input` 元素: #### **(1) 使用 `class` 全名** - **方法**:`find_element(By.CLASS_NAME, "class-name")` - **示例**: ```python from selenium.webdriver.common.by import By # 定位 class 为 "username-input" 的 input element = driver.find_element(By.CLASS_NAME, "username-input") ``` #### **(2) 使用 CSS 选择器** - **语法**:`.class-name` - **示例**: ```python # 定位 class 为 "form-control" 的 input element = driver.find_element(By.CSS_SELECTOR, "input.form-control") # 组合多个 class(需全部匹配) element = driver.find_element(By.CSS_SELECTOR, "input.username-input.form-control") ``` #### **(3) 使用 XPath** - **语法**:`//input[contains(@class, "class-name")]` - **示例**: ```python # 定位 class 包含 "username-input" 的 input element = driver.find_element(By.XPATH, '//input[contains(@class, "username-input")]') ``` --- ### **3. 常见场景与问题** #### **场景 1:多个相同 classinput** - **解决方案**:通过索引结合其他属性定位。 ```python # 选择第一个匹配的元素 elements = driver.find_elements(By.CLASS_NAME, "form-control") first_element = elements[0] # 结合 placeholder 属性定位 element = driver.find_element(By.CSS_SELECTOR, 'input.form-control[placeholder="输入用户名"]') ``` #### **场景 2:动态 class 名** 若 class 名包含动态部分(如随机哈希值): ```python # 使用部分匹配(CSS 选择器 ^= 开头匹配,*= 包含) element = driver.find_element(By.CSS_SELECTOR, 'input[class^="dynamic-class-"]') ``` #### **场景 3:复合 class 名** 若 class 名包含空格(多个类名): ```python # 使用 CSS 选择器时需保留空格(表示同时满足) element = driver.find_element(By.CSS_SELECTOR, "input.class1.class2") ``` --- ### **4. 操作示例(Selenium)** ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com/login") # 等待元素可见(通过 class 定位) username_input = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.CSS_SELECTOR, "input.username-input")) ) # 输入文本 username_input.send_keys("test_user") # 提交表单 driver.find_element(By.CLASS_NAME, "submit-btn").click() ``` --- ### **注意事项** 1. **唯一性**:确保 `class` 能唯一识目元素,否则需结合其他属性(如 `id`、`name`)。 2. **动态加载**:若元素异步加载,需使用 `WebDriverWait` 等待元素可见可交互。 3. **性能**:`By.CLASS_NAME` 比 `CSS_SELECTOR` `XPath` 更快,但灵活性较低。 掌握 `input class` 的定位方法,能高效处理表单输入、搜索框等常见 Web 交互场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值