前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >项目中遇到的bug(web前端-持续更新)

项目中遇到的bug(web前端-持续更新)

作者头像
空空云
发布2018-09-27 12:03:22
9610
发布2018-09-27 12:03:22
举报
文章被收录于专栏:大前端_Web

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://cloud.tencent.com/developer/article/1347623

项目中遇到的常见bug,及时整理。

input放在a标签里面单击不能获取input的光标(IE环境下)

双击才可以获得焦点,目前有的解决方案:

  • 不要给a标签添加href属性;
  • 不要在外面套上a标签。

隐藏input标签的光标

项目需求:input值json加载,只读+光标隐藏,通用的解决方案有其他标签模拟,但是不能改input

所以解决方案为给input加下面这两个属性:

代码语言:javascript
复制
//只读 
readonly="readonly" 
//隐藏光标
unselectable="on"

返回私有数组

返回数组的一个副本,这样改动就不会影响原数组,只是副本而已

代码语言:javascript
复制
    var array = (function () {
       var days = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
        return {
            getDays: function () {
                return days.slice();
            }
        }
    })()

jquery选择器的扩展

代码语言:javascript
复制
//jQuery contains 选择器,对Contains查找的内容不区分大小写
jQuery.expr[':'].Contains = function (a, i, m) {
    return jQuery(a).text().toUpperCase()
        .indexOf(m[3].toUpperCase()) >= 0;
};

例子

代码语言:javascript
复制
<div>john</div>
<div>John</div>
<div>hey hey JOHN hey hey</div>
代码语言:javascript
复制
$('div:Contains("john")') //会选择到两个div

当一个变量被声明后,扩充其属性并不会改变原数据类型

代码语言:javascript
复制
var a = 'foo'; 
a[1] = 'O'; 
console.log(0.1+0.2==0.3||a); //'foo'

闭包是函数的嵌套定义,而不是函数的嵌套调用

代码语言:javascript
复制
function foo(){
    console.log(a);
}
function bar () {
    var a = 3; 
    foo(); 
}
var a = 2;
bar(); //2

DOMContentLoaded兼容IE9以下版本

代码语言:javascript
复制
//jQuery的实现

      // Mozilla, Opera and webkit nightlies currently support this event
      if ( document.addEventListener ) {
          // Use the handy event callback
          document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );

          // A fallback to window.onload, that will always work
          window.addEventListener( "load", jQuery.ready, false );

          // If IE event model is used
      } else if ( document.attachEvent ) {
          // ensure firing before onload,
          // maybe late but safe also for iframes
          document.attachEvent( "onreadystatechange", DOMContentLoaded );

          // A fallback to window.onload, that will always work
          window.attachEvent( "onload", jQuery.ready );

          // If IE and not a frame
          // continually check to see if the document is ready
          var toplevel = false;

          try {
              toplevel = window.frameElement == null;
          } catch(e) {}

          if ( document.documentElement.doScroll && toplevel ) {
              doScrollCheck();
          }
      }

        //函数DOMContentLoaded的赋值
        if ( document.addEventListener ) {
            DOMContentLoaded = function() {
                document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
                jQuery.ready();
            };

        } else if ( document.attachEvent ) {
            DOMContentLoaded = function() {
                // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
                if ( document.readyState === "complete" ) {
                    document.detachEvent( "onreadystatechange", DOMContentLoaded );
                    jQuery.ready();
                }
            };
        }

// The DOM ready check for Internet Explorer
        function doScrollCheck() {
            if ( jQuery.isReady ) {
                return;
            }

            try {
                // If IE is used, use the trick by Diego Perini
                // http://javascript.nwbox.com/IEContentLoaded/
                document.documentElement.doScroll("left");
            } catch(e) {
                setTimeout( doScrollCheck, 1 );
                return;
            }

            // and execute any waiting functions
            jQuery.ready();
        }

//网友的实现
    // @win window reference
    // @fn function reference
    function contentLoaded(win, fn) {

        var done = false, top = true,

                doc = win.document,
                root = doc.documentElement,
                modern = doc.addEventListener,

                add = modern ? 'addEventListener' : 'attachEvent',
                rem = modern ? 'removeEventListener' : 'detachEvent',
                pre = modern ? '' : 'on',

                init = function(e) {
                    if (e.type == 'readystatechange' && doc.readyState != 'complete') {
                        return;
                    }

                    //load事件在win上,移除事件监听(readystatechange, DOMContentLoaded, load)
                    (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false);

                    //保证fn只执行一次
                    if (!done && (done = true)) fn.call(win, e || e.type);
                },

                poll = function() {
                    try { root.doScroll('left'); } catch(e) { setTimeout(poll, 50); return; }
                    init('poll');
                };

        if (doc.readyState == 'complete') fn.call(win, 'lazy');
        else {
            if (!modern && root.doScroll) {
                try { top = !win.frameElement; } catch(e) { }
                if (top) poll();
            }
            doc[add](pre + 'DOMContentLoaded', init, false); //触发时,doc.readyState为'interactive'
            doc[add](pre + 'readystatechange', init, false); //会触发两次,readystatechange先触发,再触发DOMContentLoaded, 最后才是load
            win[add](pre + 'load', init, false);
        }

    }

document.querySelectorAll和getElementsByTagName的区别

代码语言:javascript
复制
//html代码
<ul>
    <li>a</li>
    <li>b</li>
    <li>c</li>
</ul>

//script代码
    var ul = document.querySelector('ul');
    var li = ul.querySelectorAll('li'),
            tagLi = ul.getElementsByTagName('li'); //动态取值 
    ul.appendChild(document.createElement('li'));
    console.log(li.length); //3   li.toString()为[object NodeList]
    console.log(tagLi.length); //4 tagLi.toString()为[object HTMLCollection]
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年04月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • input放在a标签里面单击不能获取input的光标(IE环境下)
  • 隐藏input标签的光标
  • 返回私有数组
  • jquery选择器的扩展
  • 当一个变量被声明后,扩充其属性并不会改变原数据类型
  • 闭包是函数的嵌套定义,而不是函数的嵌套调用
  • DOMContentLoaded兼容IE9以下版本
  • document.querySelectorAll和getElementsByTagName的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档