面试题(北京)

1、两个div,如何控制左边那个宽固定为100px,而右边自适应
首先我想到的,肯定是js啦

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>test</title>
        <style type="text/css">
            div{height: 100px; }
            .one{width: 100px;  background-color:green; float: left;}
            .two{background-color:red }
        </style>
    </head>
    <body>
        <div class="one"></div>
        <div class="two"></div>
        <script>
            var one=document.getElementsByClassName("one")[0];
            var two=document.getElementsByClassName("two")[0];
            var body=document.body;
            two.style.width=(body.clientWidth-100)+"px";
        </script>
    </body>
</html>

第二办法,就是float,然后不给第二个设置宽

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>test</title>
        <style type="text/css">
            div{height:100px; }
            .one{width: 100px; background-color:green;  float: left;}
            .two{background-color:red;  }
        </style>
    </head>
    <body>
        <div class="one"></div>
        <div class="two"></div>
    </body>
</html>

 
第三个办法,利用table特性。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>test</title>
        <style type="text/css">
            .wrapp{display: table; width: 100%}
            div{height: 100px; display:table-cell;  }
            .one{width: 100px;  background-color:green; }
            .two{ background-color:red }
        </style>
    </head>
    <body>
        <div class="wrapp">
            <div class="one"></div>
            <div class="two"></div>
        </div>
    </body>
</html>

第四种办法,利用弹性盒子布局,flex:1意思为水平占满剩余空间

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>test</title>
        <style type="text/css">
            .wrapp{display:flex;}
            div{height: 100px;  }
            .one{width: 100px; background-color:green; }
            .two{flex:1; background-color:red }
        </style>
    </head>
    <body>
        <div class="wrapp">
            <div class="one"></div>
            <div class="two"></div>
        </div>
    </body>
</html>

2、css如何解决垂直居中
首先想到的是利用行高来解决

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>test</title>
        <style type="text/css">
            .wrapp{
                border: red solid 1px;
                height: 300px;
                display: inline-block;
                line-height: 300px
            }
        </style>
    </head>
    <body>
        <div class="wrapp">
            哈哈,^_^
        </div>
    </body>
</html>

 
第二种,利用表格td的css有垂直居中的属性

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>test</title>
        <style type="text/css">
            .wrapp{
                border: red solid 1px;
                height: 300px;
                display: table-cell;
                vertical-align: middle;
            }
        </style>
    </head>
    <body>
        <div class="wrapp">
            哈哈,^_^
        </div>
    </body>
</html>

第三、又是咱们的弹性盒子了

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>test</title>
        <style type="text/css">
            .wrapp{
                border: red solid 1px;
                height: 300px;
                display: flex;
                align-items:center;
            }
        </style>
    </head>
    <body>
        <div class="wrapp">
            哈哈,^_^
        </div>
    </body>
</html>

3、数组去重
利用es6中新增的数据类型Set,该数据类型在其他语言中一直存在,set的元素不允许重复。构造函数允许传一个数组,而返回一个去重后的新数组对象

var arr=[2,4,4,6];
var newArr=new Set(arr);
console.log(newArr)

第二种,是我自己研究出来的,道理很简单,居然没有百度到这种写法

 <script>
        function qc(arr) {
            var newArr=[];
            for(var i=0; i<arr.length; i++){
                if(newArr.indexOf(arr[i])==-1){
                    newArr.push(arr[i])
                }
        }
        return newArr;
        }
        var arr=[2,4,4,6];
        var qcArr=qc(arr);//得到去重复后的arr
        console.log(qcArr)
</script>

第三种是利用Array类的filter( )函数来解决
该函数需要一个function类型的值来做为形参,用来回调。该回调内部会遍历所以
该function值也有三个形参:element、index、self,分别是遍历的当前元素值、索引、和数组本身

self.indexOf(element)返回的是数组该元素第一次出现的位置
index是当前遍历到的索引
如果两者不一致,则说明有重复,两者相同的话才说明不重复则予以返回
参考:http://www.jb51.net/article/99038.htm
http://blog.csdn.net/tongyanping1015/article/details/54708044

 <script>
        var arr=[2,4,4,6];
        var newArr=arr.filter(function(element, index, self){
            return self.indexOf(element) === index;
        });
        console.log(newArr)
</script>

 
4、写一个js正则,用来检测标签中是否有class属性
首先写一个不用则正的

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>test</title>
    </head>
    <body>
        <div class="wrapp">第1个div </div>
        <div class=""> 第2个div </div>
        <div> 第3个div </div>
        <script>
            function isHaveClass() {
                for(var i=0;  i<arguments.length; i++){
                    var domClass=arguments[i].getAttribute("class");
                    if(domClass==null||domClass==""){
                        console.log(""+(i+1)+"个Dom节点没有class")
                    }else{
                        console.log(""+(i+1)+"个Dom节点的class为:"+domClass)
                    }
                }
            }
            var div1=document.getElementsByTagName("div")[0];
            var div2=document.getElementsByTagName("div")[1];
            var div3=document.getElementsByTagName("div")[2];
            isHaveClass(div1,div2,div3)
        </script>
    </body>
</html>

第二种办法,我感觉反倒麻烦啊,可能是我写错了???

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>test</title>
    </head>
    <body>
        <div class="wrapp">第1个div </div>
        <div class=""> 第2个div </div>
        <div> 第3个div </div>
        <script>
            function isHaveClass() {

                for(var i=0;  i<arguments.length; i++){
                    ohtml = arguments[i].outerHTML,
                      attrArr = ohtml.split(' ');
                    var pattern = /class/;//正则
                    var havedClass=pattern.test(attrArr);//匹配正则
                    if(havedClass){
                        console.log(""+(i+1)+"个Dom节点的【有】class属性")

                    }else{
                        console.log(""+(i+1)+"个Dom节点【没有】class属性")
                    }
                }
            }
            var div1=document.getElementsByTagName("div")[0];
            var div2=document.getElementsByTagName("div")[1];
            var div3=document.getElementsByTagName("div")[2];
            isHaveClass(div1,div2,div3)
        </script>
    </body>
</html>



原文地址:https://www.cnblogs.com/dshvv/p/7491106.html