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 tag
str.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)); //返回true
str = "1234567";
re.lastIndex=0;
alert(re.test(str)); //返回true
</script>
一共有两种解决办法
1. 正则模式去掉全局模式
2. 重新设置lastIndex为0
当然也可以使用"na".match(Reg)