阿里前端笔试题
1、一个表格HTML代码如下
<table id="table1">
<tbody>
<tr><td>1</td><td><button>Delete</button></td></tr>
<tr><td>2</td><td><button>Delete</button></td></tr>
<tr><td>3</td><td><button>Delete</button></td></tr>
</tbody>
</table>
当使用者按下”Delete”按钮时, 将所按到的行(tr)删除, 请使用原生JavaScript实现。
<script type="text/javascript">
var table = document.getElementById('table1');
table.addEventListener('click', function(event){
var tr = event.target.parentNode.parentNode;
tr.parentNode.removeChild(tr);
});
</script>
2、背景:
1.对象A直接调用对象B的某个方法,实现交互逻辑。但是导致的问题是A和B紧密耦合,修改B可能导致A调用B的方法失效。
2.为了解决耦合导致的问题,我们可以设计成:
对象A生成消息->将消息通知给一个事件消息处理器(Observable)->消息处理器将消息传递给B
具体的调用过程变成: A.emit(’message’,data); B.on(‘message’,function(data){ });
请实现这一事件消息代理功能
//请将事件消息功能补充完整
function EventEmitter(){
}
堆糖2道前端笔试题
1、写一个jquery组件,获取form表单中所有元素的键/值,并以Ajax方法提交。不能使用JQ提供的序列化方法。
2、
有一个数组 3,10,45,6,7,8,9,9,6,5,42,54,6,5,76,7,54,45,45,67,67,4,100,7,32,20,42,84,81,22,每次随机删除其中一个元素,问经过5次删除后,提问 新数组中第16个元素,在原数组中所在位置。
//answer
var array_var = array_ori = [3,10,45,6,7,8,9,9,6,5,42,54,6,5,76,7,54,45,45,67,67,4,100,7,32,20,42,84,81,22];
var array_boo, array_len,num_rand,k,count;
var count_del = 5,
//新数组中元素的位置
elem_newarray = 16;
array_len = array_ori.length;
array_boo = new Array(array_len);
//array_boo 数组初始化
for(var i=0; i<array_len; i++){
array_boo[i] = 0;
}
for(var j=0;j<count_del;j++){
//产生随机数
num_rand = Math.round( Math.random()*(array_var.length) );
array_var.splice(num_rand,1);
//删除原数组中某个元素的时候,将对应boolean数组同样索引的元素置1
k = count = 0;
while(true){
//记录array_boo数组中0的个数
if (!array_boo[k]) {
count++;
}
if (count == num_rand) {
array_boo[k] = 1;
break;
};
k++;
}
}
count = 0;
for (var z = 0; z<array_len; z++) {
if (!array_boo[z]) {
count++;
}
if (count == elem_newarray) {
console.log("新数组中第"+ elem_newarray+"个元素,在原数组中所在位置:"+z);
break;
};
};