JavaScript中多的是。你不知道的坑

来源:互联网 发布:国外租房软件 编辑:程序博客网 时间:2024/04/24 18:10

1、最新的chrome浏览器:

使用方法:

function $ajax(a, c, b) {    function e() {        return g.status == 200 ? /xml/i.test(g.getResponseHeader("content-type")) ? g.responseXML: g.responseText: null    }    var i = ["MSXML2.XMLHTTP", "Microsoft.XMLHTTP"],    g;    try {        g = new XMLHttpRequest    } catch(h) {        for (var j = 0; j < i.length; j++) try {            g = new ActiveXObject(i[j]);            break        } catch(k) {}    }    if (g) {        g.open(c ? "POST": "GET", a || location.href, !!b);        g.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");        g.setRequestHeader("If-Modified-Since", new Date(0));        if (b) g.onreadystatechange = function() {            if (g.readyState == 4) {                var i = e();                b(i) === !0 && setTimeout(function() {                    $ajax(a, c, b)                },                1E3)            }        };        g.send(c || "");        return b ? g: e()    } else $trackEvent("tuna-error", "$ajax", "xmlObj creation failure", $tunaVersion())}

会出现下面以下错误:

  1. Uncaught SyntaxError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': 'Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)' is not a valid HTTP header field value. tuna_offline_101221.vpn.js?releaseno=20130320:680
    1. $ajaxtuna_offline_101221.vpn.js?releaseno=20130320:680
    2. reasoncodeCheckHotelSearchResult.aspx:1261
    3. (anonymous function)

修改方案为

function $ajax(e,d,b){            function f() {                return a.status == 200 ? /xml/i.test(a.getResponseHeader("content-type")) ? a.responseXML: a.responseText: null            }            var g = ["MSXML2.XMLHTTP", "Microsoft.XMLHTTP"],            a;            try {                a = new XMLHttpRequest            } catch(h) {                for (var c = 0; c < g.length; c++) try {                    a = new ActiveXObject(g[c]);                    break;                } catch(i) {}            }            if (a) {                a.open(d ? "POST": "GET", e || location.href, !!b);                a.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");                a.setRequestHeader("If-Modified-Since", new Date(0).toGMTString());                if (b) a.onreadystatechange = function() {                    if (a.readyState == 4) {                        var c = f();                        b(c) === true && setTimeout(function() {                            $ajax(e, d, b)                        },                        1E3)                    }                };                a.send(d || "");                return b ? a: f()            }        };

2、 

Js 对象原型,原型链,for循环读取多了属性

通过构造函数创建一个对象,再给构造函数的原型添加一个属性。下面:用for in输出这个对象的所有属性和方法的时候。那么后来从原型添加的属性会不会被输出呢?
<pre id="answer-content-1517244599" class="answer-text mb-10" name="code" style="white-space: pre-wrap; word-wrap: break-word; margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; background-color: rgb(255, 255, 255);">会的,但是可以用  obj.hasOwnProperty(i)来进行判断筛选

http://www.cnblogs.com/xqhppt/archive/2012/02/01/2334355.html
</pre><pre class="line mt-10 q-content" name="code" style="white-space: pre-wrap; word-wrap: break-word; font-size: 14px; margin-top: 10px; margin-bottom: 0px; padding: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; word-break: break-all; color: rgb(51, 51, 51); line-height: 24px; background-color: rgb(255, 255, 255);">http://blog.sina.com.cn/s/blog_51c99bb2010130xh.html

3、取值标签的文本问题:

当你需要取出某个标签内在文本的时候,你会发现:

<a href="javascript:;" ><span class="name"><b>汪</b>磊 wlei@ctrip.com</span></a> 

这个标签的内容包含有很多空格


那么,你会遇到如下问题:

你使用innerText的时候,会将多个空格忽略为1个。如t   est会变成t est

你使用textContent的时候,可以保留多个空格,但是这个属性在IE7或IE8里面是不支持的。


解决方法有:

1、将标签内在文本内容,用属性或者data存储。

2、正则表达式过滤html标签:

function setContent(str) {str = str.replace(/<\/?[^>]*>/g,''); //去除HTML tagstr.value = str.replace(/[ | ]*\n/g,'\n'); //去除行尾空白//str = str.replace(/\n[\s| | ]*\r/g,'\n'); //去除多余空行return str;}


3、

IE浏览器下面,IE7,等style,tr等某些元素的innerHTML只读

从MSDN上记录上看 col、colGroup、frameset、html、head、style、table、tfoot、tHead、title和tr的innerHTML都是只读的(IE6-IE9)。


document.createStyleSheet().cssText='body{background-color:red}'

        if (document.createStyleSheet) {            document.createStyleSheet().cssText = d;        } else {            var link = document.createElement('style');            link.type = 'text/css';            link.innerHTML = d;            document.getElementsByTagName("head")[0].appendChild(link);        }


4、

正则表达式的true false转换:

/^NA$/gi.test('na')
true
/^NA$/gi.test('na')
true
var tmpReg = /^NA$/gi
undefined
tmpReg.test('na')
true
tmpReg.test('na')
false

为什么执行一次true,一次false?
每个正则表达式都有一个 lastIndex 属性,用于记录上一次匹配结束的位置var re = /^[1-9]\d{4,10}$/gi;var str = "123456";alert(re.test(str));      //返回true// 执行上面的 test 之后我们可以弹出alert(re.lastIndex); // 弹出6即表示上一次在第6个字符之后结束那么下一次再调用 test 的时候, 就会从第6个字符之后继续搜索解决办法,将正则表达式的 lastIndex 属性设置为0 具体代码如下:<script type="text/javascript">var re = /^[1-9]\d{4,10}$/gi;var str = "123456";alert(re.test(str));      //返回truestr = "1234567";re.lastIndex=0;alert(re.test(str));      //返回true</script>
一共有两种解决办法
1. 正则模式去掉全局模式
2. 重新设置lastIndex为0

当然也可以使用"na".match(Reg)


0 0
原创粉丝点击