访问jQuery.each()中的键值对

时间:2015-04-17 07:56:15

标签: jquery each

我不了解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]。

2 个答案:

答案 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中,例如csstexthtml等等,如果您需要为集合中的每个元素设置不同的值:您返回值对于函数之外的元素。

例如,假设你要循环一个集合,如果元素为空则将背景设置为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'});