hasClass不能正常运行

时间:2013-06-17 19:38:52

标签: javascript jquery function variables onclick

我有一个li项目列表,如果找到 2个类,则会触发按钮点击。

当列表项有2个类时,我想通过单击触发btn。你们可以帮我看看吗?

代码:

<script type="text/javascript"> 
$(document).ready(function(){ 

    var $html = $("#my-div ul li");
    if ($html.hasClass("current") || $html.hasClass("extra")) {
        $(".btn-1 a").click();}
    else if ($html.hasClass("current") || $html.hasClass("extra2")) {
        $(".btn-2 a").click();}
});
</script>

因此,一个列表项具有当前+额外类,而另一个列表项hasClass 当前+ extra2

知道我在这里做错了吗?

编辑:目前它不能正常工作。

它当前将始终触发“.btn-1”单击并且不查看其他语句。我认为它只是查看“当前”类而不是“额外”或“额外2”类是否在同一项目中。

4 个答案:

答案 0 :(得分:2)

试试这个:

<script type="text/javascript"> 
$(document).ready(function(){ 

    var $html = $("#my-div ul li.current");
    if ($html.hasClass("extra")) {
        $(".btn-1 a a").click();}
    else if ($html.hasClass("extra2")) {
        $(".btn-2 a").click();}
});
</script>

问题是,当你执行$html.hasClass("current") || ..时,它总是会重新评估为true,并且当节点有一个类else

时,它不会转到current子句

答案 1 :(得分:1)

您正在对a or b所需的a and b进行比较,请将其更改为:

<script type="text/javascript"> 
$(document).ready(function(){ 

    var $html = $("#my-div ul li");
    if ($html.hasClass("current") && $html.hasClass("extra")) {
        $(".btn-1 a a").click();}
    else if ($html.hasClass("current") && $html.hasClass("extra2")) {
        $(".btn-2 a").click();}
});
</script>

答案 2 :(得分:0)

尝试替换

$html.hasClass("current") || $html.hasClass("extra")

$html.hasClass("current") && $html.hasClass("extra")

以及

$html.hasClass("current") || $html.hasClass("extra2")

$html.hasClass("current") && $html.hasClass("extra2")

答案 3 :(得分:0)

问题的原始根源是您在测试类时使用或(||)而不是(&&)。你问“李是否有班级当前或额外”。

但是,您也可以稍微重构它并使它更清洁一点:

// first, grab the <li> marked as current
var $current = $('#my-div ul li.current');
// test if we have a match and proceed
if ($current.size()){
    // cache the final target selector (by initializing it to `false` we
    // can later test and only execute the click when we have a match)
    var target = false;

    // now get in to second-level classes (can use either `.is()` or
    // `.hasClass()` (thought I'd show an alternative method as well))
    if ($current.hasClass('.extra')) target = '.btn-1 a a';
    else if ($current.hasClass('.extra2')) target = '.btn-2 a';
    // else if ($current.hasClass('...')) target = '...'; // more tests

    // see if we found a match and click it
    if (target) $(target).click();
}