问个关于斑马线效果 JS 问题

2014-06-26 08:48:34 +08:00
 83f420984
代码 :



我自己理解:

第一次循环,开始判断"tr"标签是不是为真,由于"tr"标签上没有“odd”这个class,所以第一次循环的结果为假,然后跳到“else”里面,把“odd”这个变量变成“true”;开始第二次循环,判断第二个"tr"标签,由于上次已经把“odd”这个变量变成“true”,所以这次的判断结果为真,则给第二个标签加“odd”这个class,然后把“odd”这个变量就成“false”;

不知道对不对 ,请指点,谢谢
3552 次点击
所在节点    程序员
13 条回复
coolicer
2014-06-26 08:51:27 +08:00
感觉好麻烦的样子。直接取所有tr,然后%2 不行吗?
83f420984
2014-06-26 08:52:53 +08:00
@coolicer 这个是《DOM编程艺术》上的例子,为初学者准备的
sneezry
2014-06-26 08:54:40 +08:00
第二次循环结束后odd变成false了,楼主最后一句可能口误了。就是这样的过程,楼主没理解错。

题外话,可以用:nth-child(odd)伪类来用css实现这种效果。
coolicer
2014-06-26 08:56:42 +08:00
@83f420984 哦,是这样的
83f420984
2014-06-26 08:56:56 +08:00
@sneezry 这代代码我想了好长时间,始终想不通,就在我把这个代码用中文写出来的时候,就明白了,然后又不知道理解是不是对,谢谢
wizaliu
2014-06-26 10:00:01 +08:00
用这么麻烦吗???css不能实现?
Mutoo
2014-06-26 10:04:28 +08:00
odd变量是一个分支开关

重复 {

 当(odd为真) {

  //做点什么

  将odd置为假

 } 不然 {

  //什么也不做

  将odd置为真

 }

}
83f420984
2014-06-26 10:12:41 +08:00
@Mutoo 老兄这么解释的很直观,最开始的直观理解代码的意思和老兄回复的一样,当初我不明白是,这段代码在去运行时,我不知道它是如何在工作,比如说,它是怎么在“tr”标签上完成一些事情。
83f420984
2014-06-26 10:13:23 +08:00
@wizaliu CSS可以完成这些,只不过我在初学JS,学习中。。。
Mutoo
2014-06-26 11:22:27 +08:00
@83f420984

rows = document.getElementsByTagName("tr"); // 把所有 tr 存到 rows 数组中

addClass(rows[j], "odd"); // 把 "odd" 添加到第 j 个 tr 的 class="" 里面

具体的修改 DOM 的操作是由下面的 addClass 函数完成的。

相关资料 http://www.w3school.com.cn/jsref/prop_classname.asp
nilennoct
2014-06-26 13:21:32 +08:00
for (var j = 1; j < rows.length; j += 2) {
addClass(rows[j], 'odd');
}
lemonlwz
2014-06-26 13:48:33 +08:00
0, 1, 0, 1, 0, 1 ^M
1, 0, 1, 0, 1, 0 ^M
0, 1, 0, 1, 0, 1 ^M
...
练习题在于举一反三, 你有空可以尝试一下这个, ^M 是换行.
83f420984
2014-06-26 14:27:44 +08:00
@Mutoo 感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/119584

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX