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())}
会出现下面以下错误:
修改方案为
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
/^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
- JavaScript中多的是。你不知道的坑
- 《你不知道的JavaScript 中卷》
- 你不知道的javascript (中)
- 你不知道的javascript-中卷
- 你不知道的 Javascript
- 你不知道的 Javascript
- JavaScript中你可能不知道的九件事
- JavaScript中你所不知道的数组ArrayBuffer
- JavaScript中你所不知道的数组ArrayBuffer
- JavaScript中你所不知道的数组ArrayBuffer
- JavaScript中你所不知道的数组ArrayBuffer
- JavaScript中你所不知道的数组ArrayBuffer
- 我真的不知道 你是
- 多得是你不知道的事~
- [图解] 你不知道的 JavaScript - “this”
- [图解] 你不知道的 JavaScript - “this”
- 【图解】你不知道的 javascript “this”
- Javascript 你不知道的事
- Linux内核设计与实现——内核同步
- Java反转一个栈
- 参加百度轻应用编程马拉松总结
- C++程序的自启动写入注册表的代码
- LeetCode刷题笔录Word Break II
- JavaScript中多的是。你不知道的坑
- CCLog用法
- myeclipse 常用快捷键
- Core Data的使用
- python re
- hdu 1230 runtime 为何
- Following Orders(拓扑排序)
- Linux下的守护进程
- struts2 项目 初级