我不了解jQuery.each函数的语义。这种代码的和平工作正常:
arr = $("#foo").find("div");
// modify css formatting for all sub-divs
$.each(arr, function(name, value) {
arr.eq(name).css({backgroundColor:'red', fontWeight:'bold'});
});
我没有理解为什么我无法直接访问这样的价值
value.css({backgroundColor:'red', fontWeight:'bold'});
因为据我所知(键,值)对,值应该等于arr [name]。
答案 0 :(得分:6)
因为value
将是一个原始DOM元素,而不是一个jQuery实例。你可以这样做:
$(value).css({backgroundColor:'red', fontWeight:'bold'});
...但是当您为所有元素设置相同的css
时,您根本不需要each
:
arr = $("#foo").find("div");
// modify css formatting for all sub-divs
arr.css({backgroundColor:'red', fontWeight:'bold'});
旁注:对于做想要循环遍历jQuery集的内容的情况,如arr
(它不是数组,顺便说一句),更常用的事情是是arr.each(...)
,而不是$.each(arr, ...)
。您还可以将函数传递到大多数setter中,例如css
,text
,html
等等,如果您需要为集合中的每个元素设置不同的值:您返回值对于函数之外的元素。
例如,假设你要循环一个集合,如果元素为空则将背景设置为red
,如果不是,则设置为green
:
$("selector for the elements").css("background-color", function() {
return $.trim($(this).text()) === "" ? "red" : "green";
});
答案 1 :(得分:2)
因为value
是dom元素引用而不是jQuery对象,所以它没有像.css()
这样的jQuery方法。
没有必要像你一样使用迭代,你可以在.css()
对象上调用arr
方法,该对象是一个包含对所有子div
的引用的jQuery对象元素
arr = $("#foo").find("div");
arr.css({backgroundColor:'red', fontWeight:'bold'});