jQuery.each方法返回对象本身,这个作用不大,一般我们需要在循环中筛选,返回一个东西。
如:<input type="radio" value="a" name="a"/>A
<input type="radio" value="b" name="a"/>B
<input type="radio" value="c" name="a"/>C
<input type="button" value="Check" onclick="alert(getChoice())" />
<script>
function getChoice() {
return $('input[name=a]').each(function () { if(this.checked) return this.value; })
}
</script>
不过不知道修改这个方法会不会有问题,还请大家评定一下。修改方法如下:jQuery.each=function (object,callback,args) {
var name,i=0,
length=object.length,
isObj=length===undefined||jQuery.isFunction(object);
var result; if(args) {
if(isObj) {
for(name in object) {
if((result=callback.apply(object[name],args))!==undefined) {
return result;
}
}
} else {
for(;i<length;) {
if((result=callback.apply(object[i++],args))!==undefined) {
return result;
}
}
} } else {
if(isObj) {
for(name in object) {
if((result=callback.call(object[name],name,object[name]))!==undefined) {
return result;
}
}
} else {
for(var value=object[0];i<length;value=object[++i]) { if((result=callback.call(value,i,value))!==undefined) return result; }
}
}
}
使用方法:返回一个有效值则退出循环,并且each方法返回该值,其他与jQuery.each相同。若未能找到项目,则方法返回undefined
如:<input type="radio" value="a" name="a"/>A
<input type="radio" value="b" name="a"/>B
<input type="radio" value="c" name="a"/>C
<input type="button" value="Check" onclick="alert(getChoice())" />
<script>
function getChoice() {
return $('input[name=a]').each(function () { if(this.checked) return this.value; })
}
</script>
不过不知道修改这个方法会不会有问题,还请大家评定一下。修改方法如下:jQuery.each=function (object,callback,args) {
var name,i=0,
length=object.length,
isObj=length===undefined||jQuery.isFunction(object);
var result; if(args) {
if(isObj) {
for(name in object) {
if((result=callback.apply(object[name],args))!==undefined) {
return result;
}
}
} else {
for(;i<length;) {
if((result=callback.apply(object[i++],args))!==undefined) {
return result;
}
}
} } else {
if(isObj) {
for(name in object) {
if((result=callback.call(object[name],name,object[name]))!==undefined) {
return result;
}
}
} else {
for(var value=object[0];i<length;value=object[++i]) { if((result=callback.call(value,i,value))!==undefined) return result; }
}
}
}
使用方法:返回一个有效值则退出循环,并且each方法返回该值,其他与jQuery.each相同。若未能找到项目,则方法返回undefined
----这个还是有点关系的,看看$(...).each( fn )的实现就是直接返回jQuery.each()的结果。直接返回jQuery实例,意味着后面可以直接跟其它jQuery函数:比如$(...).each( fn ).append( ... )之类。按照LZ的改法,会破坏jQuery的函数串接思想,可能对其他程序造成问题。
你已经破坏了jquery的正常使用,参考如下代码:
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
</head>
<body>
<span>1</span><br/>
<span>2</span><br/>
<span>3</span><br/>
<span>4</span><br/>
<span>5</span><br/>
<script>
var a = 0;
var b = 1;
$("span").each(function(){
a += +$(this).html();
}).css("background", "red").each(function(){
b *= +$(this).html();
});
alert([a, b]);
</script>
</body>
</html>
return object;
}是不是打破jQuery的思想就不用研究了,因为我一般不会这样使用。
只是不知道这样框架会不会产生问题,因为我看到框架里面也会调用jQuery.each。