闲来无事,写写JS与CSS两个小面试题
一 CSS浮动之高度塌陷
背景
什么是浮动? 让一个元素飘着、浮着,使之
脱离文档流
;它的作用就是让竖着排的元素横向排列
那什么是高度塌陷呢?
所谓浮动造成的高度塌陷,就是在
父元素没有设置高度
的情况下,其子元素浮动后,脱离文档流,则父元素处于塌陷状态(没有高度
);因为子元素浮动后是不占据父元素的位置空间的。
有很多种方法可以解决这个问题,常用方法是:伪元素清除浮动
二 JS事件冒泡和事件委托
事件冒泡
什么是事件冒泡:从触发事件的那个节点一直到document,是自下而上的去触发事件
<div id="father">
<div id="son">事件测试</div>
</div>
<script src="jquery.min.js"></script>
<script>
window.onload = function(){
//addEventListener绑定事件的第三个参数默认为false
document.getElementById("father").addEventener("click",funtion(){
console.log("这是父div"+this.id)
})
document.getelementById("son").addEvenListener("click",function(){
console.log("这是子div"+this.id)
})
}
</script>
点击father输出结果: 这是父divfather
点击son输出结果 这是子divson 这是父divfather (事件冒泡:先执行son,在执行father)
什么是事件委托:当页面中
很多表格或列表需要添加事件时
,如果逐个添加
那就太麻烦
了,但是使用事件委托
就能极大的减轻我们的工作量
,同时也能提高页面的性能
。
事件委托
事件委托是利用事件的冒泡原理来实现的,大致可以分为三个步骤:
1.确定要添加事件元素的父级元素;
2.给父元素定义事件,监听子元素的冒泡事件;
3.使用 event.target 来定位触发事件冒泡的子元素。
没用事件委托的代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
<ul id="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<script>
window.onload = function(){
var the_ul = document.getElementById('list');
var the_li = the_ul.getElementsByTagName('li');
// 挨个添加点击事件
for( var i=0; i < the_li.length; i++ ){
the_li[i].onclick = function(){
console.log(this.innerHTML)
}
}
}
</script>
</body>
</html>
使用事件委托的代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
<ul id="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<script>
window.onload = function(){
// 1.确定要添加事件元素的父级元素;
// 2.给父元素定义事件,监听子元素的冒泡事件;
// 3.使用 event.target 来定位触发事件冒泡的子元素。
var the_ul = document.getElementById('list');
the_ul.onclick = function(e){
console.log(e.target.innerHTML)
}
}
</script>
</body>
</html>