关于innerHtml()插入的代码样式失效

在使用BootStrap框架开发手机适配HTML页面时,遇到通过JavaScript的innerHTML方法动态插入的表格样式失效问题。内容是根据用户输入通过AJAX获取数据,并追加到页面中。发现追加的class="success"未生效,导致表格样式错乱。解决方法是改用jQuery的html()方法,成功避免了innerHTML导致的样式问题,同时也修复了之前遇到的相似BUG。

          最近公司要求研发一个手机适应的HTML页面,所以采用了BootStrap框架,页面很简单,就是根据用户输入的四个值,发送AJAX请求,去调用webservice接口得到json数据,把数据通过.innerHTML方法追加到id为neirong的div中,作为一个表格显示在下方,其中表格也是需要带class属性,带有BootStrap的样式。

 <!DOCTYPE html>
<html>
	<head>  
	
		<link href="css/bootstrap.min.css" rel="stylesheet"/>
		<script src="js/jquery-3.2.1.js"></script>
		<script src="js/bootstrap.min.js"></script>
		<meta charset="utf-8" />
		   <meta name="viewport" content="target-densitydpi=device-dpi, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
		   <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
		   <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"/>
		<title>信息查询</title>
		<style>
			*{
				margin: 0px;
				padding: 0px;
			}
			#all{
				padding-top: 30px;
				width: 80%;
				margin: auto;
			
			}
			#gonggao{
				padding: 10px;
				border: solid 0px gainsboro;
				border-radius: 10px;
			}
			#tupian{
			margin-top:10px;
				text-align:center;
				
			}
			#gonggao p{
				padding-left: 20px;
			}
			#neirong{
				margin-top: 20px;
				padding: 10px 45px 10px 15px;
				border: solid 0px gainsboro;
				border-radius: 10px;
			}
			#neirong button{
				margin: 5px 20px;
			}
			#buttom{
				text-align: center;
				padding: 10px;
				margin-top: 20px;
				height: 60px;
			white-space:nowrap;  
			}
			a{
				
				padding-left: 2%;
			}
		</style>
	</head>
	
	<body>
		<div id="all">
		<div id="gonggao">
		
		<form class="form-horizontal">
		
  <div class="form-group">
    <label  class="col-sm-2 control-label" >ck:</label>
    <div class="col-sm-10">
      <input type="text" class="form-control" placeholder="请输入ck" id="ckid" name="ck" >
    </div>
  </div>
  
  <div class="form-group">
    <label class="col-sm-2 control-label">cw:</label>
    <div class="col-sm-10">
   	<input type="text" class="form-control" placeholder="请输入cw" id="cwid" name="cw" >
    </div>
  </div>
  
  
    <div class="form-group">
    <label  class="col-sm-2 control-label">cp:</label>
    <div class="col-sm-10">
   	<input type="text" class="form-control" placeholder="请输入cp" id="cpid" name="cp" >
    </div>
  </div>
  
  
    <div class="form-group">
    <label class="col-sm-2 control-label">pc:</label>
    <div class="col-sm-10">
		<input type="text" class="form-control" placeholder="请输入pc" id="pcid" name="pc" >
    </div>
  </div>
  
  <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
      <button type="button" class="btn  btn-primary btn-block btn-lg" onclick="getMessage()">查询</button>
    </div>
  </div>
</form>
		</div>
	</div>
		
			<div id="neirong">
				<!-- 要追加的数据放在此处 -->
		

			</div>
	
		</div>
		


		<script type="text/javascript">
		//定义样式数组
		var arr1 = ["success","warning","danger","active","info"];
		var xmlHttp;

			function createXMLHttpRequest() {					
		  		  if (window.ActiveXObject) {
		     		   xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
				//  alert("创建ActiveXObject");
		   		 } 
					    else if (window.XMLHttpRequest) {
					        xmlHttp = new XMLHttpRequest();
					//alert("创建XMLHttpRequest");
					    }
					}
			
			function createXml(str){ 
				  if(document.all){ 
				  var xmlDom=new ActiveXObject("Microsoft.XMLDOM") 
				  xmlDom.loadXML(str) 
				  return xmlDom 
				  } 
				  else {
				  return new DOMParser().parseFromString(str, "text/xml") 
				  } 
				}
			//把字符串转变为json对象
			function strToJson(str){ 
				   var json = eval('(' + str + ')'); 
				    return json; 
			} 
			
			

			function getMessage(){
				
				 var url1 = 'http://4**********.com.cn/******/services/I********ve?wsdl';   //为保护隐私,wsdl链接不显示。
						 
						//将取出的值,传入参数
					var ck=document.getElementById("ckid").value;
				if(ck==""||ck==null){
					alert("ck未输入!");
					return ;
				}

					var cw=document.getElementById("cwid").value;
					var cp=document.getElementById("cpid").value;
					var pc=document.getElementById("pcid").value;

					var soap1 = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:stoc="http://*****.*****.****.com/"><soapenv:Header/>  <soapenv:Body>      <stoc:*****>         <!--Optional:-->         <arg0>{"pc":"'+pc+'","cw":"'+cw+'","ck":"'+ck+'","operatorid":"11111","cp":"'+cp+'"}</arg0>         <!--Optional:-->         <arg1>?</arg1>      </stoc:******> </soapenv:Body></soapenv:Envelope>';
						
						
							createXMLHttpRequest();
					//		alert(xmlHttp);
					//	alert("创建:"+url1+"数据:"+soap1);
						 xmlHttp.onreadystatechange = showResponseProdu;

						 xmlHttp.open("POST", url1, true);
						 xmlHttp.send(soap1);
						//alert("send OK");

			}
			
			

			function showResponseProdu(){
					var code1 = xmlHttp.responseText;
				//	alert(code1);
					//将得到的返回结果修改编码
					var ret1=	unescape(code1.replace(/&#x/g, '%u').replace(/;/g, ''));	
					//alert(ret1);
					//将修改后的xml字符串变成xml对象
					var xmlDomss1=	createXml(ret1); 
					
					//取出xml对象中 return元素的值
					var xmlName1=xmlDomss1.getElementsByTagName("return")[0].childNodes[0].nodeValue;
					
				//return元素的值转变为json格式
					var obj11 =strToJson(xmlName1);
					//对json格式取名字,信息,状态
					//alert(xmlName1);
					//document.getElementById("productoInfodd").innerText=xmlName1;
					if(obj11.status==null){
					alert("系统异常!");
					}
					
					
					var statuss1=obj11.status;

					if(statuss1=="0"){
							

				{
                             var str1='	<table class="table table-hover table-bordered"  id="productoInfodd">	<tr class="active">			<td>CP</td>			<td>CPNAME</td>			<td>PC</td>			<td>CCLX</td>			<td>CW</td>			<td>GG</td>			<td>ZSL</td>			<td>KYS</td>		</tr>';
                             var array = eval(obj11.jsarrayposdtl) ;
                                for (var i=0;i<array.length;i++){
									 var ssst=array[i];
								 var one=ssst;
								 var dtlarray=eval(one.showbyCP);
                                    for(var j=0 ;j<dtlarray.length;j++){
                                       var dtlone=dtlarray[i];
                                    
			str1+=' <tr class="'+arr1[j]+'">	<td>'+one.cp+'</td>	<td>'+one.cpname+'</td>	<td>'+dtlone.pc+'</td>	<td>'+dtlone.cclx+'</td><td>'+dtlone.cw+'</td>			<td>'+dtlone.gg+'</td>			<td>'+dtlone.zsl+'</td>			<td>'+dtlone.kys+'</td>	</tr>  ';  
										
								   }

                                }
							$("#neirong").html(str1+"</table>");
					
								
                         }
					}else{
						var messages=obj11.message;
						alert("错误!"+messages);
					}
				}
		</script>

	</body>
		
</html>

        在追加str1的时候,一开始neirong的div是这样的,我想把得到的数据 str1+=’ ‘+one.cp+’ ‘+one.cpname+’ ‘+dtlone.pc+’ ‘+dtlone.cclx+’’+dtlone.cw+’ ‘+dtlone.gg+’ ‘+dtlone.zsl+’ ‘+dtlone.kys+’ '; 作为tr使用innerHTML写到< span id=“addTable”>中去,但是追加之后,发现其中带的class="success"是没有起作用的。然后它所在的表格也和上面的不对应。

<div id="neirong">
			<table class="table table-hover table-bordered" >
			
		<tr class="active">
			<td>CP</td>
			<td>CPNAME</td>
			<td>PC</td>
			<td>CCLX</td>
			<td>CW</td>
			<td>GG</td>
			<td>ZSL</td>
			<td>KYS</td>
		</tr>
	<span id="addTable">
	</span>
		
</table>
			</div>

谷歌浏览器跑出来的是

<div id="neirong">
			<table class="table table-hover table-bordered" >
			
		<tr class="active">
			<td>CP</td>
			<td>CPNAME</td>
			<td>PC</td>
			<td>CCLX</td>
			<td>CW</td>
			<td>GG</td>
			<td>ZSL</td>
			<td>KYS</td>
		</tr>
	<span id="addTable">
		<tr class="active">
			<td>CP</td>
			<td>CPNAME</td>
			<td>PC</td>
			<td>CCLX</td>
			<td>CW</td>
			<td>GG</td>
			<td>ZSL</td>
			<td>KYS</td>
			</tr>
	</span>
		
</table>
			</div>

这样的 代码是没有表格的。所以最好的解决办法就是,把整个table都作为字符串写到div里面。此处使用的是jquery的html()方法,使用innerHTML方法出现无样式的问题。

同理,应该也解决了我之前遇到的一个问题,可以选择时间修改之前遇到的BUG
之前的 https://blog.csdn.net/qq8693/article/details/81562257

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值