apianmuse
2018-01-15 15:26
$("li").css('')
和
$("li").each(function (index,element) { $(this).css(''); })
有什么区别吗?
下面这样写为什么只改变了第一个li的样式,each相当于for循环那不应该三个都变吗
$("li").each(function (index,element) {
$(this).eq(index).css('background','red');
})
至于你说的为什么只改变了第一个,this是指向当前的这一个li,所以$(this).eq(index)每一次操作的时候是对一个元素的操作,index=0时,第一个就相当于 第一个li.eq(0) 所以取了,但是index=1之后,eq(1),eq(2)取第二个第三个元素对吧,但是$(this)每次只有一个,所以不可能取到。 你alert($(this).eq(index))可以看到的。
这个的区别就是$("li").css("需要添加的样式")相当于$("li").each(function(){ $(this).css(需要添加的样式) }),
只不过.css()方法已经把后面我写的each()以及回调函数给封装起来了,你看不见,你只需要给它“需要添加的样式”这个参数就行了,这也是面对对象的概念,注重做什么,不关注怎么做的,这里讲each()是因为,each()方法我们平时迭代也可以用的到
$("li").css('')和$("li").each的区别:通过$()方法找到指定的元素合集后可以进行一系列的操作。比如我们操作$("li").css('') 给所有的li设置style值,因为jQuery是一个合集对象,所以[css方法内部就必须封装一个遍历的方法],被称为隐式迭代的过程。要一个一个给合集中每一个li设置颜色,这里方法就是[each],学each()方法是给你一个遍历的jq方法方便自己定义fun,css()里面已经封装了。
你这种写法我转换下:
for(index=0;index<3;index++)
{
li[index].eq(index)
}
这个li[index]本身就只有一个元素,下表为0的时候取到本身,下标大于0之后没有取得呢。
望采纳,一起学习。
$(this).eq(index).css('background','red'); 问题出在eq(index)上,因为外面用了each,所以你这里的$(this)就相当于已经遍历过了,这里的$(this)就已经起到了你加eq()想让他遍历的愿望。
jQuery基础(二)—DOM篇
114014 学习 · 590 问题
相似问题