面试奇遇 -- 原生JS
最近几日去参加一些面试,多多少少有一些收获。
现将遇到的一些面试题,做一下分析和总结。
1、使用原生JS,不能使用递归,查找dom中所有以“<com-”开头的自定义标签tagName。
<!DOCTYPE html> <html lang="zh"> <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>DOM获取自定义标签</title> </head> <body> <con-1>con11</con-1> <con-2>con22</con-2> <con-3>con33</con-3> <p>p11</p> <p>p12</p> <p>p13</p> <p>p14</p> <com-1>com11</com-1> <com-2>com12</com-2> <com-3>com13</com-3> <script type="text/javascript"> //获取body下的所有内容,结果为字符串 var str = document.getElementsByTagName('*')[0].innerHTML; console.log(str); //使用正则表达式,用于匹配字符串中对自定义标签 var reg = /<com-.*>.*<\/com-.*/g; //利用字符串对象的match()方法并结合正则,获取字符串str中匹配的正则子串,结果为数组 var res = str.match(reg); console.log(res); /* 输出的结果: <com-1>com11</com-1> <com-2>com12</com-2> <com-3>com13</com-3> */ </script> </body> </html>
2、将一个多维对象转换为二维对象:
// 封装一个函数,使得对象obj转换后的结果为objTo的形式 var obj = { "data": { "err": 1, "msg": "错误" }, "list": ["a", "b"], "request_id": "geo5-esd1-efor-veuq" }; var objTo = { "data.err": 1, "list.0": "a", "list.1": "b", "reuqest_id": "geo5-esd1-efor-veuq" };
js代码如下:
<script type="text/javascript"> var obj = { "data": { "err": 1, "msg": "错误" }, "list": ["a", "b"], "request_id": "geo5-esd1-efor-veuq" }; var objTo = { "data.err": 1, "list.0": "a", "list.1": "b", "reuqest_id": "geo5-esd1-efor-veuq" }; //封装函数 function toObj(obj) { var newObj = {}; for(let pro in obj) { if(obj[pro].push != undefined) { for(let i = 0; i < obj[pro].length; i++) { newObj[pro + '.' + i] = obj[pro][i]; } } else if(typeof obj[pro] == 'object') { for(let j in obj[pro]) { if(obj[pro][j] == '错误') { } else { newObj[pro + '.' + j] = obj[pro][j]; } } } else { newObj[pro] = obj[pro]; } } return newObj; } console.log(toObj(obj)); </script>
3、写一种方法:将一个维度比较高的对象转换为GET参数模式(URL地址拼接的带有参数的字符串)
该方法写的有点乱,如果有哪位大神有更优的解决方法,希望共勉!
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>对象转换为URL参数</title> </head> <body> <script type="text/javascript"> var obj = { "openid": "123456", "userinfo": { "name": "小明", "sex": "男", "tags": ["读书", "游戏", "旅行"], "settings": { "theme": "white", "signature": "好好学习天天向上", "size": 16 } }, "status": 200 }; //封装函数 function toURL(obj) { var str = '?'; for(var key in obj) { if(key == 'status') { } else { //判断数据类型 var type = typeof(obj[key]); //基本类型数据拼接 if(type == 'string' || type == 'number' || type == 'boolean') { str += key + '=' + encodeURIComponent(obj[key]) + '&'; } else if(type == 'object') { //对象类型判断 for(var pro in obj[key]) { var type2 = typeof(obj[key][pro]); if(type2 == 'string' || type2 == 'number' || type2 == 'boolean') { str += key + '.' + pro + '=' + encodeURIComponent(obj[key][pro]) + '&'; } else if(type2 == 'object') { //判断对象数据是否为数组 if(obj[key][pro] instanceof Array) { var arr = obj[key][pro]; var strs = ''; for(var k = 0; k < arr.length; k++) { strs += encodeURIComponent(strArr[k]); } str += strs; } else { for(var pros in obj[key]) { str += 'obj' + '.' + key + '=' + encodeURIComponent(obj[key][pro]) + '&'; } } } } } } } //处理字符串末尾的&字符 str = str.substring(0, str.length - 1); console.log(str); } toURL(obj); </script> </body> </html>
面试奇遇 -- 原生JS的更多相关文章
- 【面试篇】寒冬求职季之你必须要懂的原生JS(中)
互联网寒冬之际,各大公司都缩减了HC,甚至是采取了“裁员”措施,在这样的大环境之下,想要获得一份更好的工作,必然需要付出更多的努力. 一年前,也许你搞清楚闭包,this,原型链,就能获得认可.但是现在 ...
- 原生JS实现jquery的链式编程。
这是我根据之前遇到的一个面试题,题目:用原生JS实现$("#ct").on("click",fn).attr("id"). 然后看了篇jqu ...
- 原生JS面试题
面试中遇到的原生js题总结 1.js 去重1) indexOf Array.prototype.unique = function(){ var result = []; var len = th ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
- 常用原生JS方法总结(兼容性写法)
经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...
- 原生JS实现"旋转木马"效果的图片轮播插件
一.写在最前面 最近都忙一些杂七杂八的事情,复习软考.研读经典...好像都好久没写过博客了... 我自己写过三个图片轮播,一个是简单的原生JS实现的,没有什么动画效果的,一个是结合JQuery实现的, ...
- 再谈React.js实现原生js拖拽效果
前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目 ...
- React.js实现原生js拖拽效果及思考
一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...
- 原生JS实现全屏切换以及导航栏滑动隐藏及显示——重构前
思路分析: 向后滚动鼠标滚轮,页面向下全屏切换:向前滚动滚轮,页面向上全屏切换.切换过程为动画效果. 第一屏时,导航栏固定在页面顶部,切换到第二屏时,导航条向左滑动隐藏.切换回第一屏时,导航栏向右滑动 ...
随机推荐
- 关于 GraPhlAn 的孤独自学
最近需要用 GraPhlan 来绘制 taxo分类图,稍微研究了一下 一.简介 官网: http://huttenhower.sph.harvard.edu/GraPhlAn 主要有两个脚本: gra ...
- hdoj3183【思维】
思路: 处理方案非常霸气啊,无奈想不到. 说是n位去m个,那么默认就是取了n-m个数字,ok,然后m #include <iostream> #include <stdio.h> ...
- try/except/finally
Python也不例外,跟其他高级语言一样,内置了一套try...except...finally...的错误处理机制 当认为某些代码可能会出错时,就可以用try来运行这段代码 使用try时,要么exc ...
- Django Views: Dynamic Content
世味年来薄似纱,谁令骑马客京华. 小楼一夜听春雨,深巷明朝卖杏花. 矮纸斜行闲作草,晴窗细乳戏分茶. 素衣莫起风尘叹,犹及清明可到家. Your Second View: Dynamic Conten ...
- EditPlus 3:设置自动换行
打开软件,菜单栏点击Document,再在下拉栏中点击Permanent Settings,然后在弹出的设置框中找到Word Wrap点击,最后在弹出的小框中勾选第一个Enable word wrap ...
- the little schemer 笔记(6)
第六章 Shadows 1 是算术表达式吗 是 3 是算术表达式吗 是的 1+3 是算术表达式吗 是的 1+3×4 是算术表达式吗 当然是 cookie 是算术表达式吗 是啊,你需要来一块吗 e那么 ...
- websocket实现单聊
server# @File: ws from flask import Flask, request, render_template from geventwebsocket.handler imp ...
- SpringMVC配置文件-web.xml的配置
SpringMVC配置文件(重点) @Web.xml @核心拦截器(必配) <!-- spring 核心转发器,拦截指定目录下的请求,分配到配置的拦截路径下处理 --> <servl ...
- LSP
Liskov Substitution Principle里氏替换原则,OCP作为OO的高层原则,主张使用“抽象(Abstraction)”和“多态(Polymorphism)”将设计中的静态结构改为 ...
- 浅谈 echarts 用法
对于服务型的公司来说,需要了解用户的使用趋势,来帮助分析市场的走向,所以说统计在一个管理后台中是必不可少的. 会用到echarts插件 ,其官网网址 http://echarts.baidu.com/ ...