【发布时间】:2010-11-08 23:25:20
【问题描述】:
有没有 jQuery 方法对对象的成员执行迭代,例如:
for (var member in obj) {
...
}
我只是不喜欢 for 从我可爱的 jQuery 符号中脱颖而出!
【问题讨论】:
标签: javascript jquery for-loop iteration
有没有 jQuery 方法对对象的成员执行迭代,例如:
for (var member in obj) {
...
}
我只是不喜欢 for 从我可爱的 jQuery 符号中脱颖而出!
【问题讨论】:
标签: javascript jquery for-loop iteration
$.each( { name: "John", lang: "JS" }, function(i, n){
alert( "Name: " + i + ", Value: " + n );
});
【讨论】:
n 并不完全正确。至少可以是n.name
this 也是n。 return false 打破了每个循环...
i 和 n 认真的吗?为什么不用index 和name 来保持清洁?尽管$.each(obj, callback) 与$(obj).each(callback) 的作用不同,但您确实教会了我一些新东西,非常感谢。赞成。
您也可以将each 用于对象,而不仅仅是用于数组:
var obj = {
foo: "bar",
baz: "quux"
};
jQuery.each(obj, function(name, value) {
alert(name + ": " + value);
});
【讨论】:
注意:现在大多数现代浏览器都允许您在开发者控制台中导航对象。这个答案已经过时了。
此方法将遍历对象属性并将它们写入控制台并增加缩进:
function enumerate(o,s){
//if s isn't defined, set it to an empty string
s = typeof s !== 'undefined' ? s : "";
//if o is null, we need to output and bail
if(typeof o == "object" && o === null){
console.log(s+k+": null");
} else {
//iterate across o, passing keys as k and values as v
$.each(o, function(k,v){
//if v has nested depth
if(typeof v == "object" && v !== null){
//write the key to the console
console.log(s+k+": ");
//recursively call enumerate on the nested properties
enumerate(v,s+" ");
} else {
//log the key & value
console.log(s+k+": "+String(v));
}
});
}
}
只需将要迭代的对象传递给它:
var response = $.ajax({
url: myurl,
dataType: "json"
})
.done(function(a){
console.log("Returned values:");
enumerate(a);
})
.fail(function(){ console.log("request failed");});
【讨论】:
晚了,但可以通过Object.keys 之类的方式完成,
var a={key1:'value1',key2:'value2',key3:'value3',key4:'value4'},
ulkeys=document.getElementById('object-keys'),str='';
var keys = Object.keys(a);
for(i=0,l=keys.length;i<l;i++){
str+= '<li>'+keys[i]+' : '+a[keys[i]]+'</li>';
}
ulkeys.innerHTML=str;
<ul id="object-keys"></ul>
【讨论】: