IE浏览器不支持display:none导致option不能隐藏的问题

天大地大妈咪最大 提交于 2019-12-02 16:18:44

项目场景:级联的select元素,根据一级select的选择,二级select中的option选项需要对应的隐藏或显示。

原来的做法是display:none和display:block来隐藏和显示option,option中通过自定义属性data-category过滤,控制option的隐藏或显示,结果在IE浏览器中并不能达到想要的效果,通过网络查找,是因为IE浏览器不支持display:none属性。


解决方案:

1、给option外加一个父级标签,并设置父级标间隐藏[此处用的是span标签],如果要显示的话则去除父级标签即可(网络上查找的方法)

2、在一级select的onchange事件触发的方法中按选择的option的值判断,通过$(selector).html("option的html代码")方法直接覆盖二级select的option内容


具体参考如下:

//html代码 


//方案一
<script type="text/javascript>
    //隐藏全部选项
    function hideAllOption(selId){
		$("#"+selId).find("option").each(function(index,element){
			var elementJQ = $(element);//将元素包装成jquery元素,否则不支持parent()方法
			var eleParent = elementJQ.parent("span");
			if(!eleParent.size()){
				elementJQ.wrap("");
			}
		});
	}
	//显示指定条件的选项,兼容ie,condition 为过滤option的条件的字符串:如 "option[data-category='sport']"
	function showOptionCondition(selId,condition){
	    //查找方法需要用find向下遍历单多层级,children只向下遍历单一层级
		$("#"+selId).find(condition).each(function(index,element){ 		
		    var elementJQ = $(element);
			var eleParent = elementJQ.parent("span");
			if(eleParent.size()){
				eleParent.children().clone().replaceAll(eleParent);
			}
		});
	}
	
	
	function changeSelect1(){
	    var category = $("#select1").attr("data-category");
	    hideAllOption("select2");//全部隐藏
	    showOptionCondition("select2","option[data-category='"+category+"sport']");//按条件显示 
	}

</script>

//方案二 
<script type="text/javascript">
    function changeSelect1(){
	    var category = $("#select1").attr("data-category");
	    if("sports"==category){
	        $("#select2").html("篮球"+
                               "足球"+
                               "排球");
	    } else if("reading"==category){
	        $("#select2").html("诗词"+
                               "小说");
	    } else if("music"==category){
	        $("#select2").html("古典"+
                                "流行");
	    }
	}

</script>





易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!