有一个包含数据列表的页面,数据行数不定,每一行数据都有一个删除按钮,单击删除按钮删除该列数据,请用JavaScript实现该功能
<ul>
<li>一<button>删除一</button></li>
<li>二<button>删除二</button></li>
<li>三<button>删除三</button></li>
<li>四<button>删除四</button></li>
<li>五<button>删除五</button></li>
<li>六<button>删除六</button></li>
</ul>
解答:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<ul id="ul">
<li>一<button>删除一</button></li>
<li>二<button>删除二</button></li>
<li>三<button>删除三</button></li>
<li>四<button>删除四</button></li>
<li>五<button>删除五</button></li>
<li>六<button>删除六</button></li>
</ul>
<script>
// 利用事件委托
let el = document.getElementById('ul');
el.addEventListener('click', (e)=>{
// button触发事件,要删除的是li,所以获取其父节点
let liNode = e.target.parentNode
// 父.removeChild(子);删除掉子
el.removeChild(liNode);
});
</script>
</body>
</html>
完成函数func,实现模板替换功能
var data = {name:'xiaoming',age:'20'};
var template = 'My name is {$name},my age is {$age}.';
func(template,data) => 'My name is xiaoming,my age is 20.'
解答:
let data = {name:'xiaoming',age:'20'};
let template = 'My name is {$name},my age is {$age}.';
const func = (template, data) => {
// 方括号用于查找某个范围内的字符
let re = /{\$([\w]+)}/g;
let result = null;
let str = template;
let value = '';
while ((result = re.exec(template)) != null) {
console.log(result);
if (data.hasOwnProperty(result[1])){
value = data[result[1]];
str = str.replace(result[0],value);
}
}
return str;
}
console.log(func(template,data));
完成函数 func(obj),实现类似 JSON.stringify 的功能
let obj = {a:0, b:{c:"1",d:[2,3,4]}}
func(obj) => '{"a":0,"b":{"c":"1","d":[2,3,4]}}'
let obj = {
a:0,
b:{
c:"1",
d:[2,3,4]
}
}
// func(obj) => '{"a":0,"b":{"c":"1","d":[2,3,4]}}'
const func = (val) => {
let s = '';
if(typeof val === 'number'){
return val.toString();
} else if(typeof val === 'string'){
return '"' + val + '"';
} else if(val instanceof Array){
return '[' + val.toString() + ']';
} else if(val instanceof Object){
s += '{';
let arr = [];
for(let key in val){
arr.push('"' + key + '":' + func(val[key]));
}
s += arr.join(",") + '}';
return s;
}
}
console.log(func(obj));
完成函数 func,接受数组作为参数,数组元素包含整数或数组,函数返回扁平化后的数组
func([1,[2,[[3,4],5],6]]) => [1,2,3,4,5,6]
let arr = [1,[2,[[3,4],5],6]];
// func([1,[2,[[3,4],5],6]]) => [1,2,3,4,5,6]
const func = (val) => {
let newArr = [];
if (val instanceof Array){
for(let i=0;i<val.length;i++){
if(typeof val[i] === 'number'){
newArr.push(val[i]);
}else{
newArr = newArr.concat(func(val[i]));
}
}
}
return newArr;
}
console.log(func(arr));
编写正则,检验 email 地址的合法性:
var re = /^\w[\w\.]+@[\w]+\.(com|org)$/;
console.log(re.test('someone@gmail.com'));
console.log(re.test('bill.gates@microsoft.com'));
console.log(re.test('tom@voyager.org'));
console.log(re.test('.eee@88.com'));
变量作用域问题(请实现foo方法,让其有如下行为):
void function(){
var a = 6,b=7;
foo(function(){
console.log(a+b);
})
}();
VM6338:3 Uncaught ReferenceError: a is not defined...
请实现,变成:
var a = 6,b = 7;
foo(function(){
console.log(a + b);
});
13
随机数生成函数,产生[0,5)之间的随机整数,每个数字概率1/5,如何使用这个函数产生[0,7)之间的随机整数,每个数字的概率为1/7