【问题标题】:jQuery, using for loops to manipulate elements? (adding/removing classes etc)jQuery,使用 for 循环来操作元素? (添加/删除类等)
【发布时间】:2015-04-26 19:06:45
【问题描述】:
function roomGen(minimum, maximum, interv) {
    for (var i = minimum; i < maximum; i += interv) {   
        room = "#room" + i;
        $(room).addClass('currentRoom');
        console.log(room);
    }
}
roomGen(1,20,1);

大家好。我正在尝试通过特定的 ids 同时向多个 div 动态添加类。我有编号为 1-100 的 id 为 #room.. 的 div。

我期待这个功能相当于打字:

$('#room1').addClass('currentRoom');
$('#room2').addClass('currentRoom');
etc...

但是它并没有给我我所希望的。 console.log 方法正在返回我所期望的(#room1#room2),并且我没有收到任何关于语法的 JS/jQuery 错误或 elem 未被识别。基本上,当我触发roomGen() 函数时……实际上什么都没有发生。

我尝试过搭配引号 (room = "'"+"#room"+i+"'"),我尝试过使用 i.toString(),我还尝试过将房间添加到数组并访问它们。这些都不适合我。

知道这是否可行吗?似乎应该如此。

【问题讨论】:

  • 你所拥有的应该可以工作。一旦 DOM 准备好(例如在 $(document).ready() 处理程序中),您是否正在运行它? P.s(这根本不会影响您的代码,但这是一个很好的做法)... 使用 var 声明 room 以阻止它成为隐式全局。
  • 或者您可以使用另一个 DOM 属性(例如,所有房间共享的类 room)来定位房间;这就是通常的做法。

标签: javascript jquery function class for-loop


【解决方案1】:

您的代码正在运行,请务必在 $(document).ready() 中添加您的脚本,或者在目标 DOM 元素之后添加脚本。

$(document).ready(function() {
	function roomGen(minimum, maximum, interv) {
	  for (var i = minimum; i < maximum; i += interv) {
		room = "#room" + i;
		$(room).addClass('currentRoom');
		console.log(room);
	  }
	}

	// generate stub data for test
	for (var i = 0; i < 100; i += 1) { 
	  $("#rooms").append('<div id="room'+i+'">room'+i+'</div>');
	}

	roomGen(1, 20, 2);
});
.currentRoom{
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="rooms"></div>

【讨论】:

    【解决方案2】:

    jQuery 对 集合 元素进行操作。 Selectfilter 正确的元素,你根本不需要循环。

    $("*[id^=room]").filter(function () {
        return 0 + this.id.replace("room", "") <= 100;
    }).addClass('currentRoom');
    

    【讨论】:

    • jQuery also 在他使用它的方式下工作得非常好。我会把选择任何一种方法归结为个人风格,而不是其他任何事情。
    • 嗯,惯用 方法是在任何情况下都不要使用您自己的循环。编写手动循环当然可以,但它不符合 jQuery 的精神。
    猜你喜欢
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2022-07-29
    • 2018-01-27
    相关资源
    最近更新 更多