0

我有一个 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>

所以一个列表项具有类current + extra,而另一个列表项具有类 current + extra2

知道我在这里做错了什么吗?

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

目前会一直触发“.btn-1”点击,不看其他语句。我认为它只查看“当前”类,而不是“extra”或“extra2”类是否也在同一个 li 项目中。

4

4 回答 4

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") || ..不会进入子句elsecurrent

于 2013-06-17T19:41:15.157 回答
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>
于 2013-06-17T19:41:29.950 回答
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")
于 2013-06-17T19:41:14.403 回答
0

问题的根源在于您在测试类时使用了 or ( ||) 而不是 and ( )。&&你在问“如果 li 有当前或额外的课程”。

但是,您也可以对其进行一些重构并使其更清洁:

// 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();
}
于 2013-06-17T19:48:38.930 回答