为什么addClass在一个元素上工作而在另一个元素上不工作?

时间:2012-07-23 01:13:05

标签: jquery haml

该类“打开”会添加到ul元素,但不会添加到dropdown#register元素。

<ul class="nav"></ul>
<script> $("#register_dropdown").addClass("open"); </script>
<script> $("ul").addClass("open"); </script>
<span class="dropdown" id="register_dropdown"></span>

1 个答案:

答案 0 :(得分:3)

$("#register_dropdown")返回一个空的jQuery对象,因为执行该行时,DOM中不存在register_dropdown

我对HAML没有经验,但将您的脚本包装在DOM ready handler内是可行的方法:

%script $(function(){ $("#register_dropdown").addClass("open"); });

在普通标记中,它应呈现为:

<script> $(function(){ $("#register_dropdown").addClass("open"); }); </script>

如果您愿意,也可以使用更详细的方式(与上面的结果相同):

$(document).ready(function() {
    //DOM is ready, put your code here
    $("#register_dropdown").addClass("open");
});

这可以防止您的代码在DOM完全加载之前运行。您可以在将元素添加到DOM之后移动该行,但是在准备好DOM之后操作它是一种很好的做法。

Reference