【问题标题】:Jquery append and "for" functionJquery追加和“for”函数
【发布时间】:2013-04-25 13:20:00
【问题描述】:

我制作了一个测验创建器,但现在我正试图将其中的信息提取到“前端”测验中。

我正在尝试构建这样的 for 循环。并且在这里尝试将类 '.hide' 添加到所有具有类 '.question-holder' 的 div 中,但第一个创建的除外。

for(var i = 0; i < questions.length; i++) 
{
    var q = questions[i];
    var answers = q.getAnswers();
    $(".question-holder").append("<h2 id='QuizQuestionHeadline'>" + q.getQuestion() + "</h2><div class='question-wrap'></div>");            
    $(".question-wrap").append("<ul class='answers' id='quiz-answers'></ul>");          

    for(var n = 0; n < answers.length; n++)
    {
        $("#quiz-answers").append("<li><input tabindex='1' type='checkbox' id='input-1'><label for='input-1'><span>"+ answers[n].getAnswer() +"</span></label></li>");          
    };
};      

for(var i = 2; i < questions.length; i++) 
{
    $(".question-holder").addClass('hide');         
}; 

上述代码创建的最终 HTML 应该在哪里:

<div class="question-holder">

<h2 id='QuizQuestionHeadline'>The Question</h2>
      <ul id='quiz-answers' class="answers">
        <li>
          <input tabindex="1" type="radio" id="input-1" name="quiz-radio">
          <label for="input-1"><span>Answer 1</span></label>
        </li>
        <li>
          <input tabindex="2" type="radio" id="input-2" name="quiz-radio" checked>
          <label for="input-2"><span>Answer 2</span></label>
        </li>
      </ul>
</div>

这里有人可以帮我吗? :)

【问题讨论】:

  • 现在我们知道您想要做什么,而是发生了什么?
  • 为什么要在 for 循环的末尾加上分号?
  • @LeeTaylor 我猜只是在我的手指上有些默认:)
  • @KevinB 相反,它正在构建前端,但是 1.) 它不会将类“.hide”放到除第一个之外的每个 div.question-holder 中。 2.)只有第一个答案循环附加,而不是每个“问题组”中的所有答案。问题是,在“创建者部分”中,您可以在一个测验中创建多个问题,并为每个问题输入一些替代答案。在前端,它应该与问题 1、问题 2 一起进入“幻灯片”,并在您按下“下一步”按钮时切换。

标签: jquery for-loop append


【解决方案1】:

您最好还是隐藏所有相关的 div,然后只显示您想要的任何一个...

var index = 0; // 0 based, so 0 is the first question

$(".question-holder").addClass("hide");
$(".question-holder").eq(index).removeClass("hide");

您只需更新index 变量并再次运行该代码以显示特定问题:)

【讨论】:

    【解决方案2】:

    请注意$(".question-holder").addClass('hide'); 将隐藏所有具有question-holder 类的div。所以 for 循环在这里没有任何意义。

    for(var i = 2; i < questions.length; i++) {
        $(".question-holder").addClass('hide');         
    }; 
    

    您可以为每个 div 使用不同的 id,然后将此 addClasshide 用于除第一个以外的所有 div。


    另一个简单的解决方案是:

    先隐藏所有div,然后显示第一行,如下代码。

    $(".question-holder").css('display', 'none');
    $(".question-holder:first").css('display', 'block');
    

    【讨论】:

    • 谢谢,我会尝试为问题制作 IncrementID。
    • 另一个简单的解决方案是:首先隐藏所有的div,然后显示第一行,如下代码所示。 $(".question-holder").css('display', 'none'); $(".question-holder:first").css('display', 'block');
    • 如果您只需要显示第一个 div,我添加了另一个简单的解决方案 ;)
    猜你喜欢
    • 2011-08-06
    • 1970-01-01
    • 2016-11-30
    • 2021-10-26
    • 2020-03-29
    • 2014-11-01
    • 2016-11-14
    • 2012-02-07
    • 2020-02-20
    相关资源
    最近更新 更多