1.nth-of-type(n) 和 nth-child(n) 区别
<!DOCTYPE html>
<html>
<head>
<style>
p:nth-of-type(2)
{
background:#ff0000;
}
</style>
</head>
<body>
<div>
<h1>这是标题</h1>
<p>第一个段落。</p>
</div>
<div>
<p>第二个段落。</p>
<p>第三个段落。</p>
</div>
<p>第四个段落。</p>
<p>123123</p>
</body>
</html>
结果为 '第三个段落' 和 '123123‘ 背景为红色。
而
<!DOCTYPE html>
<html>
<head>
<style>
p:nth-child(2)
{
background:#ff0000;
}
</style>
</head>
<body>
<div>
<h1>这是标题</h1>
<p>第一个段落。</p>
</div>
<div>
<p>第二个段落。</p>
<p>第三个段落。</p>
</div>
<p>第四个段落。</p>
<p>123123</p>
</body>
</html>
结果为 '第一个段落“ 和 '第三个段落” 背景为红色。
重点:
p:nth-of-type: 选中的元素是父元素中所有p子元素的第二个。
p:nth-child:选中的元素为p元素且为父元素的第二个子元素。
2.深度克隆js对象的属性
对于js中的数据,基本类型和引用类型的赋值时不同的。下面给出一个通用的js深度克隆方法。
function deepclone(obj) {
if (typeof(obj)!=='object' || obj===null) {
return obj;
}//所有的引用数据类型都指向object
var o,i,j;
if (obj instanceof Array){
o = [];
for (i = 0; i < obj.length; i++) {
if (typeof obj[i] ==='object' && obj[i]!= null) {
o[i] = deepclone(obj[i]);
}
else{
o[i] = obj[i];
}
}
}
else{
o = {};
for (j in obj) { //使用for in 进行对象属性的遍历
if (typeof(obj[j]==='object'&&obj[i]!==null)) {
o[i] = deepclone(obj[j]);
}
else{
o[j] = obj[j];
}
}
}
return o;
}