如何在jquery $(this)中到达外部父div

时间:2016-03-25 21:41:55

标签: javascript jquery

<ul id="menu-content" class="menu-content collapse in">
    <li  id="parent-menu" data-toggle="collapse" data-target="#<?= $model->idmain ?>" class="collapsed">
        <a href="?r=catalog/category&route=<?= $model->idmain ?>"> 
            <?= $model->main_category_name ?>
        </a> 
        <span class="arrow"></span>
    </li>
    <ul class="sub-menu collapse" id="<?= $model->idmain ?>">
        <!-- wanna change this -->
        <li  data-toggle="collapse" data-target="#abc<?= $modelsub->idsubcategory ?>">
            <a href="?r=catalog/sub-category&route=<?= $model->idmain ?>&routes=<?= $modelsub->idsubcategory ?>">
                sub_category_name ?>
            </a>
            <span class="arrow"></span>
        </li>
    </ul>
    <ul class="sub-menu collapse" id="abc<?= $modelsub->idsubcategory ?>">
        <li>
            <!-- im here -->
            <a href="?r=catalog/det-category&route=<?= $model->idmain ?>&routes=<?= $modelsub->idsubcategory ?>&router=<?= $modeldet->iddetail ?>"></a>
        </li>
    </ul>
</ul>
 var loc = window.location.href;
$("#menu-content li a").each(function () {
    var status = loc.indexOf($(this).attr("href")) > -1;

    if (status) {

        $(this).closest("li").addClass("active");
        $(this).closest("ul").addClass( "in" );
        $(this).closest(".sub-menu").prev(".sub-menu").addClass( "in" );
    }
});

我想到达那里(我的代码中输入的评论)。我试过.parent().find,但它没有用。我查看另一页并没有工作。 谢谢你的时间。

3 个答案:

答案 0 :(得分:1)

使用.prev()或.closest()而不使用ID或className永远不是一个好主意。原因是您的DOM最终可能会发生变化,而.prev()或.closest()位置中的标记不再映射到您正在寻找的<UL>标记。

然而,你可以走上DOM&amp;然后沿着DOM走下去寻找你正在寻找的东西。因此,只要DOM发生变化,您的代码仍会定位到相同的<UL>标记。

$(this).parents('.menu-content').find('.sub-menu')

这对于仅定位1个标记更有效,因为祖先链中可能存在多个嵌套的.sub-menu类名。但是,必须使用nearest()和prev()函数。否则,代码不会起作用。最近的()函数不能单独使用。请参阅此更新的jsfiddle示例,该示例显示它们可以一起使用。

$(this).closest("ul").prev("#<?= $model->idmain ?>");

答案 1 :(得分:0)

您正在寻找

.closest()

$(this).closest('ul');

答案 2 :(得分:0)

我认为你想要$(this).parent().parent().prev();,因为在这种情况下你的this指的是锚。如果您希望获得<li>下的<!-- wanna change this -->,那么您需要以下内容:

$(this).parent().parent().prev().find('li').first();