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、
通过构造函数创建一个对象,再给构造函数的原型添加一个属性。下面: 用for in输出这个对象的所有属性和方法的时候。那么后来从原型添加的属性会不会被输出呢?
会的,但是可以用 obj.hasOwnProperty(i)来进行判断筛选
http://www.cnblogs.com/xqhppt/archive/2012/02/01/2334355.htmlhttp://blog.sina.com.cn/s/blog_51c99bb2010130xh.html
3、取值标签的文本问题:
当你需要取出某个标签内在文本的时候,你会发现:
这个标签的内容包含有很多空格
那么,你会遇到如下问题:
你使用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,一次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 具体代码如下:
1. 正则模式去掉全局模式
2. 重新设置lastIndex为0
当然也可以使用"na".match(Reg)