循环遍历创建DOM只能插入一个
问题:在动态创建列表时,通过页面加载函数获取到后台数据后,循环遍历创建dom节点时,只能插入最后一个的数值的节点
编辑
然而获取的数据结构为:
编辑
对应下可以看出执行遍历后,只是传递了最后一个值,之前的值都被覆盖了,问题代码如下:
window.onload = function getdata(){ $.ajax({ url:'index', async:false, dataType:'json', success:function(e){ var data = e; console.log("已经获取数据"); var father = document.getElementById('.showbox'); var div = document.createElement('div');//问题就出在这里 for (let key in data) { for(let i=0,res=data[key];i<=res.length-1;i++){ console.log(res[i]); var html=''; html+='<label style="background-color:#40c0c31c;margin-top: 5px;">'; html+='<a href="emergencyreportingdetail.html" class="mui-navigate-right" style="color: #333;">'; html+='<p>应急事件编号:'+res[i].id+'</p>'; html+='<p>应急事件名称:'+res[i].name+'</p>'; html+='<p>发布单位名称:'+res[i].danwei+'</p>'; html+='<p>提报日期:'+res[i].data+'</p>'; html+='</a>'; html+='</label>'; html+='<input name="radio1" type="radio" style="margin-top:25px"/>'; div.innerHTML = html; // console.log(html); showbox.appendChild(div); } } } }) },
因为动态创建的dom节点都会被appendChild()方法添加到,一个div父盒子中,但是父盒子却并没有放在遍历循环中,所以始终只有一个父盒子,所传递参数就会覆盖之前的参数,就造成了只会插入最后一个的情况。
解决办法
将父元素也放入循环遍历中,代码如下:
window.onload = function getdata(){
$.ajax({
url:'index',
async:false,
dataType:'json',
success:function(e){
var data = e;
console.log("已经获取数据");
var father = document.getElementById('.showbox');
var div = document.createElement('div');//问题就出在这里
for (let key in data) {
for(let i=0,res=data[key];i<=res.length-1;i++){
console.log(res[i]);
var html='';
html+='<label style="background-color:#40c0c31c;margin-top: 5px;">';
html+='<a href="emergencyreportingdetail.html" class="mui-navigate-right" style="color: #333;">';
html+='<p>应急事件编号:'+res[i].id+'</p>';
html+='<p>应急事件名称:'+res[i].name+'</p>';
html+='<p>发布单位名称:'+res[i].danwei+'</p>';
html+='<p>提报日期:'+res[i].data+'</p>';
html+='</a>';
html+='</label>';
html+='<input name="radio1" type="radio" style="margin-top:25px"/>';
div.innerHTML = html;
// console.log(html);
showbox.appendChild(div);
}
}
}
})
},
效果如下:
本地存储和会话存储
localStorage:
是一种你不主动清除它,它会一直将存储数据存储在客户端的存储方式,即使你关闭了客户端(浏览器),属于本地持久层储存
sessionStorage:
用于本地存储一个会话(session)中的数据,一旦会话关闭,那么数据会消失,比如刷新。
localStorage与sessionStorage具有相同的API,以下方法都可以用于sessionStorage
localStorage存储方法
localStorage.name ='vanida;
localStorage["name"]='vanida';
localStorage.setItem("name","vanida");
localStorage获取值方法
var name = localStorage["name"]
var name= localStorage.name
var name= localStorage.getItem("name");
localStorage清除特定值方法
//清除name的值
localStorage.removeItem("name");
localStorage.name='';
localStorage清除所有值方法
localStorage.clear()
localStorage只能存储字符串,如果需要存储对象,首先要转化为字符串。利用JSON.stringify();
var person = {name:"vanida","sex":"girl","age":25};
localStorage.setItem("person",JSON.stringify(person));
// localStorage.person="{"name":"vanida","sex":"girl","age":25}"
注意:JSON.stringify()中不要忘了“i”,stringify而不是stringfy!
然后取出person的对象你可以用JSON.parse();
person = JSON.parse(localStorage.getItem("person"));
// {name: "vanida", sex: "girl", age: 25}
输出语句 document.write
这个可以直接把内容输出在页面上(可以解析标签),除数字类型外需要用单引号包裹
document.write(111)
document.write('abc')
document.write('<h1>')
document.write(111)
document.write('</h1>')
var i=0
document.write(i)
输出结果:
变量命名规则
两种数据类型检测的区别
各种数据类型的转换
1.数字类型的转换
1、数字类型的转换
语法:Number(你要转换的数据)
返回值:转换好的数据
特点:将转换数据当作一个整体;能转成数字就转数字类型,不能转为数字类型就会返回NaN
2、整型转换
语法:parseInt()
返回值:转换好的数据
特点:将转换数据拆分成一个个的字符,挨个转换直到一个不能转为合法字符串的位置为止,且不认识小数点
3、浮点转换
语法:parseFloat()
返回值:转换好的数据
特点:整型转换特点一样,只不过多认识了一个小数点
4、正负值的添加
语法:+变量 、-变量
返回值:转换好的数据
特点:和Number的解析规则一样
5、非加法的数学运算
语法:parseFloat()
返回值:转换好的数据
特点:整型转换特点一样,只不过多认识了一个小数点
Numer('100') //100
Numer('abc') //NaN
Numer('100.123') //100.123
parseInt('100') //100
parseInt('100abc') //100
parseInt('100.123') //100
parseFloat('100.123')//100.123
var b1 =true
parseInt(b1) //NaN
var b2 ='100'
var b3 = +b2
var b4 = -b2
console.log(b3,b4) // 100 100
var b2 ='100'
var b3 = b2 - 0
var b4 = b2 * 1
var b5 = b2 / 1
console.log(b3,b4,b5) // 100 100 100
2.字符串的转换
1、string()
语法:string(你要转换的数据)
返回值:转换好的数据
特点:任何数据类型都能转
2、tostring()
语法:要转换的数据.tostring()
返回值:转换好的数据
特点:undefined null不能转换
3、+运算符
js里的加法运算符有两种情况
1.进行字符串的拼接
+符号任意一边是字符串的时候就是字符串拼接
2.进行数学运算
+符号两边都是布尔值或者数字类型时,才是数学运算