题目一
用js实现一个用户行收集器,功能如下:
1,收集用户在页面中的所有click行为,并使用log方法发送日志,包含触发事件的节点xpath信息
2,xpath需包含tagName、id、class、同级同名节点索引(从1开始),如
<body> <div id=“container”> <p>something</p> <a id=“link1” class=“link-class”></a> <a id=“link2” class=“link-class current”>target link</a> </div> </body>
点击target link时,xpath为 body[1]/div[1][@id=“container”]/a[2][@id=“link2”][contains(@class, “link-class")][contains(@class, “current")]
3,不侵入、不影响其他业务代码的执行
var obody=document.getElementsByTagName('body')[0];
obody.addEventListener('click',function(e){
console.log('1');
console.log(getXPath(e.target));
})
function getXPath(target){
if(target.nodeName=='BODY') return 'body[1]';
var index=1;
var str='';
var tempTarget=target;
var nodeName=target.nodeName;
var id=target.id;
var classList=target.classList;
while(tempTarget.previousElementSilblig!=null){
if(tempTarget.previousElementSilbling.nodeName==nodeName){
index++;
console.log(index);
}
tempTarget=tempTarget.previousElementSilblig;
}
str='/'+nodeName.toLowerCase()+'['+index+']';
if(id){
str+='[@id="'+id+'"]';
}
classList.forEach(function(ele,index,self){
str+='[contains(@class,"'+ele+'")]';
})
return getXPath(target.parentNode)+str;
}题目二
小明要为n个人计划一次火星的探险,其中一个重要的任务是为每个参与者安排食物。仓库里面有m个能用一天的食物包裹,每个食物包裹有不同的类型ai。
每个人每天必须用且只能用一个食物包裹。由于某些原因,在整个过程中,每个人只能用同一种类型的食物包裹,但是不同的人用的食物包裹可以不一样。
给出人数以及食物包裹的情况,请你求出这趟探险最多可以持续多少天。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int n=0;
int m=0;
cin>>n>>m;
vector<int> a;
int k=0;
for(int i=0;i<m;i++){
cin>>k;
a.push_back(k);
}
sort(a.begin(),a.end());
int l[100]={0};
for(int i=0;i<a.size();i++){
l[a[i]]++;
}
sort(l,l+100);
vector<int> h;
for(int j=0;j<100;j++){
if(l[j]>0)
{
h.push_back(l[j]);
}
}
//最多的天数
int g=m/n;
int c=h.size()-1;
int b=0;
int flag=0;
int d=n;
for(int j=g;j>0;j--){
for(int c=h.size()-1;c>=0;c--){
b=h[c]/j;
d=d-b;
if(d<=0){
cout<<j<<endl;
flag=1;
break;
}
}
if(flag==1){
break;
}else{
d=n;
}
}
if(flag==0){
cout<<'0'<<endl;}
return 0;
}
题目三
系统会随机生成id为jsLayout的 m x n 表格(m >= 3, n >= 3),请按照如下需求实现bind函数
1、bind 函数为每个td节点绑定click事件,当某个td节点被点击时class变为current,同时以该td为中心的九宫格td节点class变为wrap,具体效果参考以下图片
2、每次click后,请清空所有不需要变动的td节点的class
3、请不要手动调用bind函数
4、当前界面为系统生成 10 * 10 表格,执行 bind 函数,并点击第一个td后的效果
5、请不要手动修改html和css
6、不要使用第三方插件
7、请使用ES5语法
var tds = document.querySelectorAll("td")
for (let i = 0; i < tds.length; i++) {
// 给单个表格添加click事件监听,当被点击时,先清除整个表格的所有的样式
tds[i].addEventListener("click", function () {
for (let j = 0; j < tds.length; j++) {
tds[j].className = ""
}
// 给当前被点击的td添加类
tds[i].classList.add("current")
// 如果有下一个姐妹
if (tds[i].nextElementSibling)
tds[i].nextElementSibling.classList.add("wrap")
//如果有前一个姐妹
if (tds[i].previousElementSibling)
tds[i].previousElementSibling.classList.add("wrap")
// 如果有下一行,因为一行有10个所以%10
if (tds[i].parentElement.nextElementSibling !== null) {
tds[i].parentElement.nextElementSibling.children[i % 10].classList.add("wrap")
//不在右边界
if ((i % 10) !== 9) {
if (tds[i].parentElement.nextElementSibling.children[(i + 1) % 10] !== null) {
tds[i].parentElement.nextElementSibling.children[(i + 1) % 10].classList.add("wrap")
}
}
//不在左边界
if ((i % 10) !== 0) {
if (tds[i].parentElement.nextElementSibling.children[(i - 1) % 10] !== null) {
tds[i].parentElement.nextElementSibling.children[(i - 1) % 10].classList.add("wrap")
}
}
}
if (tds[i].parentElement.previousElementSibling !== null) {
tds[i].parentElement.previousElementSibling.children[i % 10].classList.add("wrap")
if ((i % 10) !== 9) {
if (tds[i].parentElement.previousElementSibling.children[(i + 1) % 10] !== null) {
tds[i].parentElement.previousElementSibling.children[(i + 1) % 10].classList.add("wrap")
}
}
if ((i % 10) !== 0) {
if (tds[i].parentElement.previousElementSibling.children[(i - 1) % 10] !== null) {
tds[i].parentElement.previousElementSibling.children[(i - 1) % 10].classList.add("wrap")
}
}
}
})
}

京公网安备 11010502036488号