• 常见问题 解决合集


    会持续更新

    欢迎一起探讨,如果有写的不准确或是不正确的地方,欢迎大家指出来~

    或者有更好的解决办法也可以提出来~

    略长,建议直接搜关键字/词

    如果没有你想要的内容,可以点这里去评论,或者发短消息给我,后续会继续补充

    HTML:


    CSS:

    • IE透明度:

      opacity:0.8;
      filter:Alpha(opacity=80); /* 0-100 */
      
    • 清除浮动

      .clearfix:after{
         content: '';
         display: block;
         clear: both;
         height:0;
         visibility:hidden;
      }
      .clearfix{
         *zoom: 1; /* 仅对ie67有效,zoom:1触发hasLayout,起到类似BFC的效果 */
      }
      
    • 过渡效果:

      /* 所有元素都加过渡效果 */
      *{
        transition: all 1s;
      }
      
      /* 除了 .tab选择器 外全部加过渡效果 */
      *:not(.tab){
        transition: all 1s;
      }
      
    • 两个行内元素不对齐的问题解决

      两个行内元素不对齐的问题解决:

      1. vertical-align:middle;
      2. float
      3. 基线没对齐
    • 垂直居中或水平居中一些问题

      PS:

    • 补充

      块状元素与内联(行内)元素的嵌套规则:https://www.cnblogs.com/jizhongjing/p/4887948.html

      Html中行内元素有哪些?块级元素有哪些?:https://www.cnblogs.com/Jackie0714/p/4923639.html

      行内元素:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Inline_elemente

      块级元素:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Block-level_elements

      • 行内元素
        (对margin仅设置左右方向有效,上下无效;padding设置上下左右都有效,即会撑大空间)
        (行内元素只能包含行内元素,不能包含块级元素)

        a、abbr、acronym、b、bdo、big、br、button、cite、code、dfn、em、(font)、i、img、input、kbd、label、map、object、q、(s、)samp、script、select、small、span、(strike、)strong、sub、sup、textarea、tt、(u、)var

        PS:
        使用 span、img、input和em 测试发现:
        其中span和em只可以设置左右margin,img和input四个方向的margin都生效
        以上四个元素四个方向的padding都生效。
        设置宽高值,img和input会生效,span和em无效果。

      • 块级元素
        (margin和padding的上下左右均对其有效)
        (块级元素中可以包含块级元素和行内元素)
        (有几个特殊块级元素只能包含内联元素,不能包含块级元素。这几个特殊标签是 h1~h6、p、dt)
        (包含的元素:块级元素与块级元素并列;内联元素与内联元素并列)

        address、article、aside、audio、blockquote、canvas、(center、)dd、(dir、)div、dl、(dt、)fieldset、figcaption、gigure、footer、form、h1~h6、header、hgroup、hr、(isindex、li、marquee、menu、noframes、)noscript、ol、output、p、pre、section、table、tfoot、ul、video

    • 垂直居中

      使用margin / padding来填充的话,不一定是居中的,还需要设置宽 / 高

      /* 所有元素指代(行内元素,行内块级元素,块级元素) */
      /* 行内元素使用span、img、input、em测试 */
      /* 行内块级使用span、img、input、em、p、div、h1、pre元素测试 */
      /* 块级元素使用p、div、h1、pre测试 */
      
      /* input的文字会居中是因为input元素本身有垂直居中效果 */
      
      /* 第1种,行内元素 和 行内块级元素 */
      /* 以子元素中高度最大的那个元素为基准垂直居中 */
      children{
          vertical-align:middle;
      }
      /* 如图(h1有margin) */
      


      /* 第2种,所有元素 有兼容性问题 */
      parent{
          display:flex;
      }
      children{
          align-self:center;
      }
      
      /* 第3种 所有元素 不设置高度 有兼容性问题 */
      /* transform: translateY(-50%);top: 50%; 并且相对父元素绝对定位 */
      parent{
          position:relative;
      }
      children{
          position:absolute;
          transform:translateY(-50%);
          top: 50%;
      }
      
      /* 同理 translate(0, -50%);top:50%; 也可以 */
      parent{
          position:relative;
      }
      children{
          position:absolute;
          transform:translate(0, -50%);
          top: 50%;
      }
      
      /* 第4种 所有元素 需要设置高度 */
      /* margin-top: 负的元素的高度的一半;top: 50%; 并且相对父元素绝对定位 */
      parent{
          position:relative;
      }
      children{
          position:absolute;
          margin-top: 负的的元素的高度的一半;
          top: 50%;
      }
      
      /* 第5种 */
      /* 父元素:line-height值等于父元素的height */
      /* 行内img元素无效果,input,span和em等正常 */
      /* 行内块级img元素无效果,input,span和em等正常 */
      /* 块级元素高度变为line-height的值 */
      parent{
          line-height: 父元素的高度;
      }
      
      /* 父元素:line-height值等于父元素的height 子元素:vertical-align: middle;*/
      /* 行内元素 和 行内块级元素 正常 */
      /* 块级元素高度变为line-height的值 */
      parent{
          line-height: 父元素的高度;
      }
      children{
          vertical-align: middle;
      }
      
      /* 子元素:line-height值等于父元素的height */
      /* 行内img元素无效果,input的高度变为line-height的值,span和em等正常 */
      /* 行内块级img元素无效果,input的高度变为line-height的值,span和em等正常 */
      /* 块级元素高度变为line-height的值 */
      children{
          line-height: 父元素的高度;
      }
      
      /* 第6种 行内元素,行内块级元素 */
      /* img元素无效果 */
      parent:after{
        content:'';
        0;
        height:100%;
        display:inline-block;
        vertical-align:middle;
      }
      
      /* 第7种  */
      /* 相对父元素绝对定位 */
      /* 未添加宽高时:只有img生效,其他都是占满父元素高度 */
      /* 添加宽高后:所有元素生效 */
      parent{
          position:relative;
      }
      children{
        position: absolute;
        top: 0;
        bottom: 0;
        margin: auto;
      }
      
      /* 第8种 */
      #parent {
          height: 250px;
      }
      #floater {
          float: left;
          height: 50%;
           100%;
          margin-bottom: -50px;
      }
      #child {
          clear: both;
          height: 100px;
      }
      
      <div id="parent">
        <div id="floater"></div>
        <div id="child">Content here</div>
      </div>
      
      /* 第9种 */
      /* 所有元素 */
      /* 父元素宽度会变成最小的宽度 */
      /* 行内元素被挤压; */
      /* 都改为相同的行内元素时,发现img会换行,input无效果,(被挤压的原因);span和em正常。 */
      parent{
          display:table;
      }
      children{
          display:table-cell;
          vertical-align: middle;
      }
      
      /* 第10种 有兼容性问题 */
      /* 宽度为父元素的宽度 并且 元素聚集在垂直方向中间 */
      parent{
          display: flex;
          flex-direction: column;
          justify-content: center;
      }
      
      
      /* 第11种 */
      /* 行内元素 行内块级元素,除了img */
      /* 块级元素会被挤压下去 */
      /* 并非真正意义的居中  */
      parent:before{
        content: '';
        display: inline-block;
        vertical-align: middle;
        height: 100%;
      }
      /* 如图: */
      



      第12种:


      来自https://www.w3cplus.com/css/vertically-center-content-with-css

    • 水平居中

      使用margin / padding来填充的话,不一定是居中的,还需要设置宽 / 高

      /* 第一种 所有元素 文字居中 */
      /* text-align:center; */
      /* 父元素 或 子元素使用都可以 */
      
      /* 第二种 块级元素 并设置宽度 */
      /* margin: 0 auto; */
      
      /* 第三种 所有元素 */
      /* 有兼容性问题 */
      /* transform: translateX(-50%);left:50%; 相对父元素绝对定位 */
      parent{
          position:relative;
      }
      children{
          position:absolute;
          transform: translateX(-50%);
          left:50%;
      }
      
      /* 同理 translate(-50%, 0); 也可以*/
      /* 有兼容性问题 */
      parent{
          position:relative;
      }
      children{
          position:absolute;
          transform: translate(-50%, 0);
          left:50%;
      }
      
      /* 同理 margin-left为负的元素宽度的一半 需要设置宽度 也可以 */
      parent{
          position:relative;
      }
      children{
          position:absolute;
          margin-left:负的元素宽度的一半;
          left:50%;
      }
      
      /* 第四种 所有元素 有兼容性问题 */
      /* 子元素高度为父元素高度,水平居中(类似于第一种的居中) */
      parent{
          display: flex;
          justify-content: center;
      }
      
      /* 第五种 有兼容性问题 */
      /* 垂直居中(此居中非彼居中) 并且 水平居中(类似于第一种的居中) */
      parent{
          display: -webkit-box;
          -webkit-box-pack:center;
          -webkit-box-align:center;
          -webkit-box-orient: vertical;
      }
      

      更多:六种实现元素水平居中:https://www.w3cplus.com/css/elements-horizontally-center-with-css.html

    • 垂直 + 水平居中:(除了以上两种一起设置外)

      /* 第一种 */
      /* 未知时,只有img元素生效 */
      /* 已知高度和宽度,所有元素生效 */
      parent{
          position:relative;
      }
      el{
        margin: auto; 
        position: absolute; 
        top: 0; 
        left: 0; 
        bottom: 0; 
        right: 0; 
      }
      

      position:fixed; top: 0; right: 0; bottom: 0; left: 0;是什么意思?:https://segmentfault.com/q/1010000002408932

      /* 第二种 有兼容性问题 */
      parent{
          display:grid;
      }
      children{
          margin:auto;
      }
      
    • (平均)占满位置

      /* 第一种 宽度会变,各个占1/n ,有兼容性问题 */
      parent{
          display:flex;
      }
      children{
          flex:1;
      }
      
      /* 第二种 原宽度,margin来填充;有兼容性问题 */
      /* 子元素的margin为0 auto;时,水平方向占满 */
      /* 子元素的margin为auto;时,水平方向占满 并且 垂直居中 */
      parent{
          display:flex;
      }
      children{
          margin:auto;
      }
      
      
    • 使用CSS伪元素模拟float:center效果


      使用CSS伪元素模拟float:center效果:http://www.w3cplus.com/css/float-center.html

    • 置顶页脚(Sticky Footer)

      置顶页脚(Sticky Footer):https://www.w3cplus.com/css/pure-css-create-equal-height-column-layout-and-certical-horizontal-centers-and-sticky-footer.html

    • html高度塌陷问题解决

      html高度塌陷问题解决:https://www.cnblogs.com/devilgod/archive/2018/09/17/9660314.html

    • flex布局

      flex布局:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

    • 修改placeholder样式:
      修改placeholder样式

    • 进度条 (使用的是原生h5的<input type="range">

      /*横条样式*/
      input[type=range] {
        -webkit-appearance: none;
         100%;
        background-size: 100%;
        height: 12px;
        border-radius: 100px;
        border: none;
        /*横条背景颜色,不需要显示已拖动的位置的话使用这个*/
        background: #e6e6e6;
      
        /* 需要显示已拖动的位置的话,使用这个 */
        background: -webkit-linear-gradient(#BC8BF4, #BC8BF4) no-repeat, #e6e6e6;
        /* 设置已拖动的部分的颜色为 #BC8BF4,未拖动的部分的颜色为 #e6e6e6 */
        background-size: 0% 100%; 
        /* 动态修改background-size即可 */
        /* 前面的值代表已拖动的位置,后面的值代表总长度 */
      }
      /*拖动块的样式*/
      input[type=range]::-webkit-slider-thumb {
        -webkit-appearance: none;
        height: 20px;
         20px;
        border: none;
        background: #fff;
        border-radius: 50%;
        box-shadow: 0 2px 4px 0 #C1C1C1;
      }
      
    • 遮罩层(拖动遮罩层,也能拖动到页面)

      遮罩层显示时,给body元素加overflow:hidden;;遮罩层隐藏时,去掉该样式即可解决。


    JavaScript:

    • 获取本周的日期:

      这里的目的是取日期,不取时间。周一到周日。

      var day = new Date();
      var num = day.getDay();
      var first = day.setDate(day.getDate() - num + 1);
      var last = day.setDate(day.getDate() + 7 - num + 1);
      console.log('本周',first,last); // 本周 1536572620051 1537004620051
      
    • 格式化日期:

      (可以封装成函数,使用replace来对应替换,如:格式传入的是HH:mm,处理的hour就对应的替换HH,处理的minute就对应的替换mm)

      // padStart是es6的语法
      var date = new Date();
      
      var year = date.getFullYear();
      var month = (date.getMonth()+1+'').padStart(2,0);
      var day = (date.getDate()+'').padStart(2,0);
      var hour = (date.getHours()+'').padStart(2,0);
      var minute = (date.getMinutes()+'').padStart(2,0);
      var second = (date.getSeconds()+'').padStart(2,0);
      console.log(year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second); // 2018-09-12 17:43:26
      
      // ----
      // 不使用padStart的方式
      var date = new Date();
      
      var year = date.getFullYear();
      var month = ('00'+(date.getMonth()+1)).slice(-2);
      var day = ('00'+(date.getDate())).slice(-2);
      var hour = ('00'+(date.getHours())).slice(-2);
      var minute = ('00'+(date.getMinutes())).slice(-2);
      var second = ('00'+(date.getSeconds())).slice(-2);
      console.log(year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second); // 2018-09-14 15:29:41
      
    • 低版本IE添加onclick事件获取不到event时,使用遍历给每个对象添加事件(并解决index的问题):

      补充:IE通过window.event获取事件对象

      var lis = document.getElementsByTagName('li');
      for( var i = 0; i < lis.length; i++ ){
          (function (n){
              lis[n].onclick = function(){
                  console.log( i + '-' + n );
              };
          }(i));
      }
      
    • 得到某个子元素是父元素第几个元素(获取索引index)

      PS:以下的兼容性可以通过:
      “获取上一个兄弟节点”可以通过getIndex获取当前的索引加一,需要判断是否大于children的长度-1;
      “获取下一个兄弟节点”可以通过getIndex获取当前的索引减一,需要判断是否小于0;
      “获取第一个兄弟节点”对应0;
      “获取最后一个兄弟节点”对应children的长度-1;

      function getIndex(target){
        var allChild=target.parentNode.children;
        var index;
        for(var i=0;i<allChild.length;i++){
          if(target==allChild[i]){
            index=i;
            break;
          }
        }
        return index;
      }
      
    • 高版本IE的onclick事件,可以委托父元素上。

      parent.onclick=function(event){
        if(event.target.nodeName=='LI'&&event.target.className!='active'){
          console.log(getIndex(event.target))
        }
      }
      
    • 使用let解决遍历添加事件index错误的问题(在遍历内使用let保存值,不是将遍历里的var改成let)

      var lis = document.getElementsByTagName('li');
      for( var i = 0; i < lis.length; i++ ){
          let n = i;
          lis[n].onclick = function(){
              console.log( i + '-' + n );
          };
      }
      
    • 使用let解决定时器遍历问题(将var改成let即可)

      for(var i = 0;i<3;i++){
          setTimeout(function(){
              console.log(i)
          },i)
      }
      
    • 低版本IE不支持getElementsByClassName:

      function getByClassName(from,name){
        from=from||document;
        if(from.getElementsByClassName){
          return from.getElementsByClassName(name);
        }else{
          var tag=from.getElementsByTagName('*');
          var child=[];
          for(var i=0;i<tag.length;i++){
            if(tag[i].className.indexOf(name)!=-1){
              child.push(tag[i]);
            }
          }
          if(child.length==0){
            child=null;
          }
          return child;
        }
      }
      getByClassName(parent,'child-class');
      getByClassName(null,'child-class');
      
    • 获取窗口/屏幕的宽/高信息:

      比较全的屏幕信息:https://www.cnblogs.com/hiuman/p/7347390.html

    • babel-polyfill

      使用了MV*框架的话,可以使用babel-polyfill,(在入口文件中引入),让IE支持es6

    • 获取上传的文件对象

      document.getElementById(id).files[0]
      
    • 获取当前访问的浏览器

        var u_agent = navigator.userAgent;
        var browser_name='Failed to identify the browser';
        if(u_agent.indexOf('Firefox')>-1){
          browser_name='Firefox';
        }else if(u_agent.indexOf('Chrome')>-1){
          browser_name='Chrome';
        }else if(u_agent.indexOf('Trident')>-1&&u_agent.indexOf('rv:11')>-1){
          browser_name='IE11';
        }else if(u_agent.indexOf('MSIE')>-1&&u_agent.indexOf('Trident')>-1){
          browser_name='IE(8-10)';
        }else if(u_agent.indexOf('MSIE')>-1){
          browser_name='IE(6-7)';
        }else if(u_agent.indexOf('Opera')>-1){
          browser_name='Opera';
        }else if(window.navigator.userAgent.indexOf('compatible') != -1 || window.navigator.userAgent.indexOf('AppleWebKit') != -1){
          browser_name = '360'
        }
      
    • 获取当前访问的终端

        var ua = navigator.userAgent;
        var terminal_name = 'Failed to identify the terminal';
        if (ua.indexOf("Windows") !== -1){
          terminal_name = "Windows";
        }else if (ua.indexOf("Mac OS X ") !== -1){
          terminal_name = "OSX";
        }else if (ua.indexOf("Linux") !== -1){
          terminal_name = "Linux";
        }else if (ua.indexOf("Android") !== -1){
          terminal_name = "Android";
        }else if (ua.indexOf("Windows Phone") !== -1){
          terminal_name = "Windows Phone";
        }else if (ua.indexOf(/Mac OS X/i) !== -1){
          terminal_name = "iOS";
        }
      
    • 本地上传图片文件后,本地预览图片

      本地上传图片文件后,本地预览图片:https://www.jb51.net/article/118660.htm

      两种方式:

      1. window.FileReader
      2. window.URL.createObjectURL
    • 上传到服务器后,预览图片

      <div v-show="imgVisible" class="view-pic" @click="hideImg">
          <img :src="imgSrc" class="view-pic-img">
        </div>
      
      .view-pic {
          position: fixed;
          top: 0;
          bottom: 0;
          left: 0;
          right: 0;
          z-index: 2000;
          background: rgba(0, 0, 0, 0.5);
      }
      
      .view-pic-img {
          display: block;
          max- 100%;
          max-height: 100%;
          margin: 0 auto;
          padding: 10px;
          box-sizing: border-box;
      }
      

      显示时:

      var that = this;
      that.imgObj = new Image();
      that.imgObj.src = that.imgSrc; // 服务器图片地址
      that.imgObj.onload = function () {
          var saveImgWrap = document.getElementsByClassName('view-pic-img')[0];
          var rate = document.body.clientWidth/document.body.clientHeight;
          var imgRate = that.imgObj.width/that.imgObj.height;
          // 根据比例100%展示图片
          // 自己计算的,目前未出现问题
          if(that.imgObj.width >= document.body.clientWidth && that.imgObj.height <= document.body.clientHeight){
              saveImgWrap.style.width = '100%';
              saveImgWrap.style.marginTop = (document.body.clientHeight - 20 - that.imgObj.height) / 2 + 'px';
          }else if(that.imgObj.height >= document.body.clientHeight && that.imgObj.width <= document.body.clientWidth){
              saveImgWrap.style.height = '100%';
          }else if(that.imgObj.width >= document.body.clientWidth && that.imgObj.height >= document.body.clientHeight){
              if(imgRate >= rate){
                  saveImgWrap.style.width = '100%';
              }else if(imgRate < rate){
                saveImgWrap.style.height = '100%';
              }
          }else if(that.imgObj.width < document.body.clientWidth && that.imgObj.height < document.body.clientHeight){
              saveImgWrap.style.marginTop = (document.body.clientHeight - 20 - that.imgObj.height) / 2 + 'px';
          }
          that.imgVisible = true;
      }
      

      隐藏时:

      this.imgVisible = !this.imgVisible;
      // 清空url地址
      this.imgSrc = ''
      // 清空样式
      var saveImgWrap = document.getElementsByClassName('view-pic-img')[0];
      saveImgWrap.style.width = '';
      saveImgWrap.style.height = '';
      saveImgWrap.style.marginTop = '';
      
    • 表情

      可以使用对象存储,键为表情的名称等等,值为表情(图片)的url地址,
      存储:点击时获取对应的值,然后拼接起来

    • 过滤emoji(数据库可能不支持emoji的存储)

      new RegExp(/[uD83C|uD83D|uD83E][uDC00-uDFFF][u200D|uFE0F]|[uD83C|uD83D|uD83E][uDC00-uDFFF]|[0-9|*|#]uFE0Fu20E3|[0-9|#]u20E3|[u203C-u3299]uFE0Fu200D|[u203C-u3299]uFE0F|[u2122-u2B55]|u303D|[A9|AE]u3030|uA9|uAE|u3030/ig)
      
    • 页面位置跳转:

      可以使用上面说的锚点的方法,
      也可以修改scrollTop,如:

      document.getElementById(id).scrollTop = document.getElementById(id).scrollHeight;
      
    • 获取浏览器系统语言

      var lang;
      if (navigator.language){
      

      lang = navigator.language.toLowerCase();
    }else if(navigator.userLanguage){
      lang = navigator.userLanguage.toLowerCase();
    };
    ```

    • 事件监听(兼容)

      function addEvent(el, type, fn) {
        if (window.addEventListener) {
          el.addEventListener(type, fn, false);
        } else if (window.attachEvent) {
          el.attachEvent('on' + type, fn);
        } else {
          el['on' + type] = fn;
        }
      }
      
    • 取消事件监听

      function removeEvent(el, type, fn){
          if (window.removeEventListener) {
            el.removeEventListener(type, fn, false);
          } else if (window.detachEvent) {
            el.detachEvent('on' + type, fn);
          } else {
            el['on' + type] = function(){};
          }
      }
      
    • 阻止冒泡 & 阻止默认行为(兼容)

      补充:IE通过window.event获取事件对象

      function stopPropagation(e){
          e = e || window.event;
          if(e.stopPropagation){
            e.stopPropagation();
          }else{
            e.cancelBubble = true;
          }
        }
      function preventDefault(e){
          e = e || window.event;
          if(e.preventDefault){
            e.preventDefault();
          }else{
            e.returnValue = false;
          }
      }
      function stopEvent(e){
          e = e || window.event;
          stopPropagation(e);
          preventDefault(e);
      }
      
    • 获取触发事件的元素(兼容)

      var target = event.target || event.srcElement;
      var from = e.relatedTarget || e.formElement;
      var to = e.relatedTarget || e.toElement;
      
    • 获取非行间样式(兼容)

      function getStyle(el, name) {
         if (el.currentStyle) {
           return el.currentStyle[name];
         }else{
           return getComputedStyle(el, null)[name];
         }
      }
      

      另:getClientRects 和 getBoundingClientRect

    • 鼠标滚动事件

      火狐:DOMMouseScroll
      其他:onmousewheel

    • IE console的问题

      IE console的问题:https://blog.csdn.net/qq_32526373/article/details/79046536

    • Module build failed: Error: Cannot find module 'lodash.clonedeep':
      另:sass安装失败的话,可以试试删了之后使用cnpm install安装。
      sass安装出错

    • 本地访问localhost成功,访问IP失败(提示拒绝访问),Vue项目(其他应该异曲同工)

      • config/index.js里面的devhost改成0.0.0.0即可
      • package.jsonscriptsdev语句最后加上 --host 0.0.0.0(就是启动的语句后加;有的启动的语句是dev,有的是start等等)
    • echarts图表自适应,窗口变化时
      echarts的图表自适应resize问题

      echart图表本身是提供了一个resize的函数的。

      echart图表的resize其实是重绘canvas。

      window.onresize = myChart.resize;
      
      myChart.setOption(option);
      

    工具/资源等:

    RGB颜色值与十六进制颜色码转换工具:http://www.sioe.cn/yingyong/yanse-rgb-16/

    在线文本比较工具:http://www.jq22.com/textDifference

    矢量图标库:www.iconfont.cn/


    其他:

    更多兼容:https://www.cnblogs.com/qq313462961/p/6527184.html

    更多兼容:https://www.cnblogs.com/wxydigua/p/3285466.html


    更多兼容:http://www.iefans.net/ie-firefox-js-jianrong/
    这个没有换行...
    帮ta换行后的内容效果如下:

    • document.form.item/document.ID

      IE中 document.formName.item(”itemName”)
      FF中 document.formName.elements["elementName"]

      建议使用document.getElementById(itemName)

    • 下标运算

      IE中 document.forms(”formName”)
      FF中 document.forms["formName"]
      IE中 document.getElementsByName(”inputName”)(1)
      FF中 document.getElementsByName(”inputName”)[1]

      建议使用[]作为下标运算

    • window.event

      IE中 可以使用window.event
      FF中 event 只能在事件发生的现场使用,可以改写成 事件=函数(event);

      function somemethod(evt) { 
        evt = evt ? evt : (window.event ? window.event : null); 
        alert(evt); 
      }
      
    • event.xevent.y 问题

      IE中,event 对象有 x, y 属性
      FF中,可用event.clientX ,event.clientY替代(IE也有该属性)

      也可用: mX = event.x ? event.x : event.pageX;
      例如: <input onclick="somemethod(event)">

    • 操作frame

      IE中 可以用window.FrameName取得该frame,
      FF中不行 FF中 可以用window.top.document.getElementById(”frameId”)来访问frame

      注:
      IE和FF都可以通过window.top.document.getElementById(”Frame”).src = ’somefile.htm’来切换frame的 内容,
      也都可以通过window.top.frameName.location = ’somefile.htm’来切换frame的内容

    • 调用showModalDialog

      IE中可以用showModalDialog一个子窗口,并获得返回值.
      FF中没有showModalDialog,但可以用window.open来实现.

      例如: 在Main.cfm文件中有如下代码:

      function ShowItemList(Obj){ 
        if (document.all){
          //IE var ReturnValue=window.showModalDialog(”ItemList.cfm?Id=341″,”self”,”dialog500px;status:false”); 
          if (typeOf(ReturnValue)!=’undefined’){ 
            Obj.value=ReturnValue; 
          } 
        } else{ 
          var subwin=window.open(Item.cfm?id=341,’newWin’,'modal=yes,width=500px’); 
        } 
      } 
      function ReturnValue(ReturnValue){ 
        Obj=document.getElementById(’elementname’); 
        Obj.value=ReturnValue; 
      } 
      

      如果需要得到返回值.需要用到window.open的参数modal=yes,而且必须在子窗口中向母窗口传值(window.opener).
      例如在subwin.cfm中加入以下代码:

      function ReturnThisValue(){ 
        window.opener.ReturnValue(document.getElementById(’SelectedItem’).value); 
      } 
      
    • 其它

      • 在FF中,自定义的属性必须使用getAttribute()

      • FF中没有 parentElement parement.children 而用 parentNode parentNode.childNodes,
        可以使用 node.getElementsByTagName()

      • FF不支持onpropertychange事件

      • FF中 createElement不支持HTML代码,可以考虑用:document.write(esHTML);

      • IE 中innerText ,在FF中可以用textContent

      • FF下用class代替IE下的className

      • 如果FF调用obj.focus(); 报错,请尝试改为:

        window.setTimeout(function(){ 
          obj.focus(); 
        }, 0); 
        
      • firefox不支持 FILTER

      • IE: blur发生在focus后, FF: blur发生在focus前调用

      • IE: event.keyCode, FF:event.which

        function catcathevent(evt) { 
          evt = evt ? evt : (window.event ? window.event : null); 
          if (document.all){ 
            var keyvalue=evt.keyCode; 
          } else { 
            var keyvalue=evt.which; 
          } 
        }
        
      • 设置容器位置 lefttop及长宽,必须加上’px’,如 $(’obj’).style.left = ‘50px’;

      • 在FF地址栏中输入about:config,会出现火狐的参数配置设置


    滚动条宽度:https://segmentfault.com/q/1010000004817695/a-1020000004965925

    滚动条样式:https://blog.csdn.net/qq316895454/article/details/50998110

    生成 iconfont 图标字体:阿里的iconfont生成即可。

    DIV横排/竖排滚动(white-space/::-webkit-scrollbar的使用技巧以及display: inline-block的选择)支持手势

    本地图片生成链接:window.URL.createObjectURL()

    input file的accept类型

    读取input的file中的图片文件

    删除本地Git保存的账号密码

    npm install报错:镜像安装cnpm

    查看git登陆用户名、邮箱

    删除git账号密码

    给localStorage设置一个有效期

    解决打包样式问题

    element-ui中validateField怎么验证部分表单字段的正确与否

    electron安装+运行+打包成桌面应用+打包成安装文件+开机自启动

    React + Electron 搭建一个桌面应用
    结合React创建一个简单Electron桌面应用

    Create-react-app与Electron中线程间的通信

    离开页面的执行函数 onbeforeunload事件与onunload事件

    IMG标签的before,after伪类不生效

    React 中 onKeyDown,onKeyUp,onKeyPress事件

    transform下position:fixed失效

    Vue 判断slot是否有内容

    部分摘自:

    《JavaScript设计模式》
    分享资料的各位
    https://www.w3cplus.com/css3/css-secrets/vertical-centering.html

  • 相关阅读:
    从零开始写一个Tomcat(贰)--建立动态服务器
    从零开始写一个Tomcat(壹)
    struts2,hibernate,spring整合笔记(4)--struts与spring的整合
    struts2,hibernate,spring整合笔记(3)
    struts2,hibernate,spring整合笔记(2)
    struts2,hibernate,spring整合笔记(1)
    ANSYS018.1案例 三维冷热水混合器流体仿真
    详细分析小米抢购软件的实现步骤
    12306改版之后简单抢票软件的实现(二)完结
    12306改版之后简单抢票软件的实现
  • 原文地址:https://www.cnblogs.com/hiuman/p/9636182.html
Copyright © 2020-2023  润新知