在 jQuery 中按类导航下一个或上一个 div

Posted

技术标签:

【中文标题】在 jQuery 中按类导航下一个或上一个 div【英文标题】:Navigate Next or Previous div by class in jQuery 【发布时间】:2015-10-25 06:15:33 【问题描述】:

我正在尝试创建导航(下一个和上一个)按钮,它显示具有类 marked 的下一个(或上一个)div。

JSFiddle Link

HTML 部分

<table>
<tr id="row_question_container">
<td valign="top" colspan="2">
<div id="at_test_area-1" class="at_test_area">
    <div id="at_questions_container">
        <div id="1" class="question_block unmarked" > 
            Hello world 1
        </div>
        <div id="2" class="question_block marked" style="display: none;">
            Hello world 2
        </div>
        <div id="3" class="question_block unmarked" style="display: none">
            Hello world 3
        </div>
        <div id="4" class="question_block marked" style="display: none">
            Hello world 4
        </div>
        <div id="5" class="question_block unmarked" style="display: none">
            Hello world 5
        </div>
        <div id="6" class="question_block marked" style="display: none">
            Hello world 6
        </div>
        <div id="7" class="question_block marked" style="display: none">
            Hello world 7
        </div>
        <div id="7" class="question_block unmarked" style="display: none">
            Hello world 8
        </div>
    </div>
</div>
</td>
</tr>
</table>
<input type="button" id="previous" value="Previous">
<input type="button" id="next" value="Next">

jQuery 部分

$(document).ready(
function () 
    var current_question_number = 0;

    $('#next').click(function () 
        ShowMarkedQuestion("next");
    );

    $('#previous').click(function () 
        ShowMarkedQuestion("previous");
    );

    function ShowMarkedQuestion(mode) 
        var id = $(".question_block").filter(function () 
            if ($(this).css('display') == 'block') 
                return true;
            
        ).attr('id');
        $('#' + id).hide();
        if (mode === "next") 
            current_question_number = parseInt(id) + 1;
         else if (mode === "previous") 
            current_question_number = parseInt(id) - 1;
         else 
            current_question_number = parseInt(id);
        
        $('#' + current_question_number).show();
    
);

我了解到,要获得具有 marked 类的下一个 div,我需要使用 find()children() 之类的 -

var marked_question = $('#at_questions_container').find('.marked').attr('id');
console.log(marked_question);

但是,自从 5 天以来,我无法找到在导航按钮中实现它的方法。我的意思是find() 可以找到第一个具有marked 类的 div,然后如何导航到下一个类似的 div。 IF 寻找下一个 div 我使用

$('#at_questions_container').find('.marked').next('.marked').attr('id')

那么,如何在上课marked下一个?

【问题讨论】:

【参考方案1】:

您可以通过跟踪当前 id 并查找已标记的下一个类来做到这一点。我已经更新了你的小提琴http://jsfiddle.net/ppt4w78y/1/

$(document).ready(
function () 
    var self = this;
    this.currentId = '1';
    this.showNext;

    $('#next').click(function () 
        ShowMarkedQuestion("next");
    );

    $('#previous').click(function () 
        ShowMarkedQuestion("previous");
    );

    function ShowMarkedQuestion(mode) 
        self.showNext = false;
        var sel = $('.question_block');
        if (mode === 'previous') 
            sel = $(sel.get().reverse());
        

        sel.each(function(idx, obj) 

            if ($(obj).attr('id') === self.currentId || !self.currentId) 
                self.showNext = true;
            
            else if (self.showNext && $(obj).hasClass('marked')) 
                self.showNext = false;
                $('#' + self.currentId).hide();
                self.currentId = $(obj).attr('id');
                $(obj).show();
                return false;
            
        );
    
);

【讨论】:

非常感谢。有效。我从来没有想过这一点。

以上是关于在 jQuery 中按类导航下一个或上一个 div的主要内容,如果未能解决你的问题,请参考以下文章

使用 WebDriver 在 codeceptJS 中按类获取元素

当动态值匹配时,jQuery 按类对元素进行分组

如何附加到最近的 div(按类)?

javascript 在Tachein中按类添加交互

jQuery 按类选择下一个兄弟,其中一个类包含多个类

使用下一个和上一个图像箭头进行导航的 JS/jQuery 数组循环缩略图