JS去掉<select>中重复的<option>

本文介绍了一个JavaScript函数,该函数用于从HTML的&lt;select&gt;元素中移除重复的&lt;option&gt;项,并将筛选后的选项重新添加到页面上。通过使用简单的数据结构和DOM操作实现了这一功能。

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'MyJsp.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  <script type="text/javascript">
  function test()
  {
  	//(1)将所有option内容保存
	var temp = document.getElementsByTagName("option");
  	var array = new Array(temp.length);
	for (var i = 0, length= temp.length; i < length; i++){
		array[i] = temp[i].innerText;
    }
	
	//(2)将所有相同的option内容去掉
	var data={};	
	var desiredArr=new Array();  
	for(var i=0;i<array.length;i++){  
		data[array[i]]=array[i];  
	} 
	
	for(var pro in data){  
	  desiredArr.push(data[pro])  
	}  
	
	//(3)删掉所有子节点
	 var parent = document.getElementById("test2");  
     //这里因为childNodes节点会动态变下标,所以用0的index实现全部删除  
     for (var i = 0, length= parent.childNodes.length; i < length; i++){  
         parent.removeChild(parent.childNodes[0]);  
     } 
	 
	 //(4)添加过滤后的子节点
     for (var i = 0, length= desiredArr.length; i < length; i++){
		 var div_view=document.createElement("option");   
	  	 var text = document.getElementById("test2");  
	     div_view.innerText=desiredArr[i];  
	     text.appendChild(div_view); 
	 }
  }
  </script>
  <body>
	<fieldset>
	<legend>DSAFSD</legend> 
  <textarea rows="10" cols="10" id="test"></textarea>
    This is my JSP page. <br>
    </fieldset>
    <del>dadf</del>
    <select id="testSelect"  onfocus="test()" >
				<optgroup label="default" id="test2">
				<option>11</option>
				<option>11</option>
				<option>224</option>
				</optgroup>
    </select>
    
    <textarea rows="10" cols="100" id="testread">testtesttest111</textarea>
  </body>
</html>
 
``` <form action="xxx.jsp" method="GET" name="性别;生日;所在地区;婚姻状况;学历;喜欢的类型;自我介绍;"> <table width="500"> <style> body{ display:grid; place-content: center; height: 100vh; margin: 0%; font-family: '黑体'; font-size: 100px; } </style> <tr> <td><b>性别</b></td> <td> <input type="radio" id="man" name="sex"/> <label for="man"><img src="images/man.jpg"> 男 </label> <input type="radio" id="women" name="sex"/> <label for="women"><img src="images/women.jpg"> 女 </label> </td> </tr> <tr> <td><b>生日</b></td> <td> <select name="year"> <option selected="selected">--请选择年--</option> <option>1990</option> <option>2000</option> <option>2010</option> </select> <select name="month"> <option selected="selected">--请选择月--</option> <option>1</option> <option>2</option> <option>3</option> </select> <select name="day"> <option selected="selected">--请选择日--</option> <option>11</option> <option>12</option> <option>13</option> </select> </td> </tr> <tr> <td><b>所在地区</b></td> <td> <input type="text" value="安徽" name="area"> </td> </tr> <tr> <td><b>婚姻状况</b></td> <td> <input type="radio" name="marital_status" id="spinsterhood"> <label for="spinsterhood"> 未婚 </label> <input type="radio" name="marital_status" id="married"> <label for="married"> 已婚 </label> <input type="radio" name="marital_status" id="divorce"> <label for="divorce"> 离婚 </label> <input type="radio" name="marital_status" id="secret"> <label for="secret">保密</label> </td> </tr> <tr> <td><b>学历</b></td> <td><input type="text" name="edu_bg"></td> </tr> <tr> <td><b>喜欢的类型</b></td> <td> <input type="checkbox" name="like_type" id="wumei"> <label for="wumei"> 妩媚的 </label> <input type="checkbox" name="like_type" id="keai"> <label for="keai"> 可爱的 </label> <input type="checkbox" name="like_type" id="xiaoxianrou"> <label for="xiaoxianrou"> 小鲜肉 </label> <input type="checkbox" name="like_type" id="laolarou"> <label for="laolarou"> 老腊肉 </label> <input type="checkbox" name="like_type" id="douxihuan"> <label for="douxihuan"> 都喜欢 </label> </td> </tr> <tr> <td><b>自我介绍</b></td> <td> <textarea cols="30" rows="10" name="self_introduction"></textarea> </td> </tr> <tr> <td> <input type="submit" value=" 免费注册 "> </td> </tr> </table> </form>```帮我生成一个完整的正确代码
最新发布
04-01
<think>嗯,用户让我帮忙生成一个完整的正确代码,看起来他们提供了一个HTML表单的示例,但可能存在一些问题需要修正。首先,我需要仔细检查他们提供的代码,找出其中的错误或不符合标准的地方。 首先,表单的`action`属性是"xxx.jsp",这显然是一个占位符,用户可能需要替换成实际的处理URL。不过用户可能只是希望代码结构正确,不一定关心具体的后端处理,所以暂时保留这个值应该没问题。 接下来看`<form>`标签的`name`属性。用户写的是`name="性别;生日;所在地区;婚姻状况;学历;喜欢的类型;自我介绍;"`,这明显不正确。`name`属性应该是一个单一的字符串,用来标识表单,而不是用分号分隔的多个名称。所以这里需要将`name`改为合适的值,比如`name="userInfo"`或者直接删除,因为`name`属性在表单中不是必需的。 然后检查各个输入字段的`name`属性。例如,性别单选按钮的`name`属性都是`sex`,这没问题,但需要确保每个单选按钮的`value`属性被正确设置,否则提交时服务器无法获取选中的值。用户提供的代码中没有`value`属性,需要补充。例如,男的单选按钮应加上`value="男"`,女的同理。 生日部分有三个下拉菜单,`name`属性分别是`year`、`month`、`day`,这部分是正确的。不过每个`<option>`标签中的值需要明确设置`value`属性,否则提交的会是选项的文本内容。例如,`<option value="1990">1990</option>`,但用户代码中没有设置,这可能导致后端获取数据时出现问题,需要补充。 所在地区的输入框`name="area"`是正确的,且预设了`value="安徽"`,这没问题。 婚姻状况的单选按钮中,每个`input`的`name`都是`marital_status`,正确。同样需要补充`value`属性,比如未婚的`value="未婚"`等,否则提交时无法传递正确的值。 学历的输入框`name="edu_bg"`正确,没有问题。 喜欢的类型是复选框,`name`都是`like_type`,但复选框通常需要不同的`name`或者使用数组形式,例如`name="like_type[]"`,以便后端能接收到多个值。不过根据用户提供的代码,可能希望保持`name`相同,所以可能需要后端处理多个同名的参数。此外,每个复选框同样需要`value`属性,否则传递的值会是'on'而不是具体的选项,所以需要补充`value`。 自我介绍部分的`textarea`的`name="self_introduction"`正确,没有问题。 接下来检查HTML结构。用户将`<style>`标签放在了`<table>`内部,这在HTML中是不正确的。`<style>`应该放在`<head>`部分,或者在HTML文档的头部,而不是在`<table>`里面。不过如果这是一个独立的例子,可能用户希望内联样式,所以需要将`<style>`移到`<head>`或者至少放在`<table>`外面。此外,用户设置的`body`样式可能影响整个页面的布局,比如`display: grid; place-content: center;`会导致表格居中显示,但`font-size: 100px;`显然过大,可能是个错误,需要调整成更合适的值,比如`16px`。 另外,`<input type="submit">`放在`<td>`中,但`<tr>`应该包含`<td>`或`<th>`,这里结构正确,不过可能需要调整布局,比如跨列合并,让提交按钮居中显示。 还有,图片标签`<img src="images/man.jpg">`中的路径是否正确,需要确保图片存在,但用户可能只是示例,所以暂时保留。 总结需要修改的地方: 1. 修正表单的`name`属性,去掉分号分隔的错误。 2. 为所有单选按钮、复选框和下拉选项添加`value`属性。 3. 将`<style>`移到`<table>`外面,并调整不合理的样式,比如字体大小。 4. 确保所有表单元素的`name`属性正确,尤其是复选框可能需要使用数组形式。 5. 可能调整提交按钮的布局,比如使用`colspan`属性跨列。 另外,注意到用户可能希望代码符合HTML标准,所以需要添加DOCTYPE声明、`<html>`、`<head>`、`<body>`等基本结构,因为提供的代码片段缺少这些部分。用户提供的代码可能只是一个片段,需要补全成完整的HTML文档。 最后,检查所有标签是否正确闭合,比如`<tr>`和`<td>`是否正确嵌套,没有遗漏闭合标签。 现在根据这些分析,可以开始构代码,确保所有问题都被修正,生成一个符合标准的完整HTML表单代码。</think>我将帮您分析并修正这段HTML代码的问题,以下是完整的正确版本(关键修改说明在代码注释中): ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户注册表单</title> <style> /* 样式移至头部 */ body { display: grid; place-content: center; min-height: 100vh; margin: 0; font-family: '黑体'; font-size: 16px; /* 修正过大的字号 */ } table { width: 500px; } </style> </head> <body> <!-- 修正form的name属性 --> <form action="xxx.jsp" method="GET" name="userInfo"> <table> <tr> <td><b>性别</b></td> <td> <!-- 添加value属性 --> <input type="radio" id="man" name="sex" value="男"> <label for="man"><img src="images/man.jpg"> 男</label> <input type="radio" id="women" name="sex" value="女"> <label for="women"><img src="images/women.jpg"> 女</label> </td> </tr> <tr> <td><b>生日</b></td> <td> <!-- 为option添加value --> <select name="year"> <option value="">--请选择年--</option> <option value="1990">1990</option> <option value="2000">2000</option> <option value="2010">2010</option> </select> <select name="month"> <option value="">--请选择月--</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <select name="day"> <option value="">--请选择日--</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> </select> </td> </tr> <tr> <td><b>所在地区</b></td> <td> <input type="text" name="area" value="安徽"> </td> </tr> <tr> <td><b>婚姻状况</b></td> <td> <!-- 添加value属性 --> <input type="radio" name="marital_status" id="spinsterhood" value="未婚"> <label for="spinsterhood">未婚</label> <input type="radio" name="marital_status" id="married" value="已婚"> <label for="married">已婚</label> <input type="radio" name="marital_status" id="divorce" value="离婚"> <label for="divorce">离婚</label> <input type="radio" name="marital_status" id="secret" value="保密"> <label for="secret">保密</label> </td> </tr> <tr> <td><b>学历</b></td> <td> <input type="text" name="edu_bg"> </td> </tr> <tr> <td><b>喜欢的类型</b></td> <td> <!-- 添加value属性,建议使用数组形式 --> <input type="checkbox" name="like_type" id="wumei" value="妩媚的"> <label for="wumei">妩媚的</label> <input type="checkbox" name="like_type" id="keai" value="可爱的"> <label for="keai">可爱的</label> <input type="checkbox" name="like_type" id="xiaoxianrou" value="小鲜肉"> <label for="xiaoxianrou">小鲜肉</label> <input type="checkbox" name="like_type" id="laolarou" value="老腊肉"> <label for="laolarou">老腊肉</label> <input type="checkbox" name="like_type" id="douxihuan" value="都喜欢"> <label for="douxihuan">都喜欢</label> </td> </tr> <tr> <td><b>自我介绍</b></td> <td> <textarea name="self_introduction" cols="30" rows="10"></textarea> </td> </tr> <tr> <td colspan="2" style="text-align: center;"> <input type="submit" value="免费注册"> </td> </tr> </table> </form> </body> </html> ``` 主要修正点说明(使用$...$格式): 1. **表单属性修正** - 原代码$name="性别;生日;..."$改为$name="userInfo"$ - 所有表单控件添加$value$属性,例如: $$<input type="radio" name="sex" value="男">$$ 2. **数据结构优化** - 复选框使用相同的$name="like_type"$配合不同$value$,适合多选数据处理 - 日期选择使用独立$name$: $$<select name="year">...<select name="month">...<select name="day">$$ 3. **样式修正** - 将$font-size: 100px$修正为$16px$ - 使用$min-height: 100vh$替代$height: 100vh$ - 提交按钮使用$colspan="2"$实现跨列居中 4. **语义化改进** - 添加$<!DOCTYPE html>$声明 - 补充完整的HTML文档结构$<html><head><body>$ - 增加$<meta charset="UTF-8">$声明 建议后续优化方向: - 为所有$<input>$添加$required$属性实现基础验证 - 使用CSS Grid/Flex优化布局 - 添加JavaScript实现日期联动选择 - 对敏感字段如婚姻状况增加隐私保护说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值