【问题标题】:Jquery Clone Elements With Dynamic Content具有动态内容的 Jquery 克隆元素
【发布时间】:2013-05-21 01:28:44
【问题描述】:

我被困在这里了!我在 div 中动态创建了元素,我需要对其进行“复制”,或者更像是该元素的“第二个版本”。它的主要功能是创建一个带有问题和答案的测验,但我需要在一个测验中创建多个问题和答案。

这里是 Jquery:

    var QuestionCreator = "QuestionCreator" + x++;
    $(".modal-body-createquiz").html("<div id='QuestionCreator'><fieldset><div class='row-fluid'><div class='span12'><div class='control-group'><label>Your Question:</label><div class='controls'><input type='text' class='input-fluid' id='NewQuizQuestion'></div></div></div><legend>Answers:</legend><div class='control-group'><label class='checkbox pull-right'><input type='checkbox' id='NewQuizRemoveAlts'> Remove Alternatives</label></div><div class='NewQuizNotice'></div><div class='NewQuizAnswersGroup'></div><a href='#' id='addNewAltRadio' class='btn pull-right'><i class='fa-icon-plus-sign'></i> Create new alternative</a></div></fieldset></div>").hide().fadeIn('slow');

    var newAnswerAlt = "appendAnswerAltRadio" + i++;
    $("<div><div class='controls'><input type='text' class='answerAltRadiobtn' data-type='answer' class='input-fluid' name='txtAnswer"+ n++ +"'> <label class='checkbox'><input type='checkbox' id='QuizCheckbox"+ c++ +"'> Correct Answer</label></div></div>").attr({id: newAnswerAlt, class: ''}).prependTo(".NewQuizAnswersGroup").hide().fadeIn('slow');
    });
    $(this).on('click', '#addNewAltRadio', function () {
    var newAnswerAlt = "appendAnswerAltRadio" + i++;
    $("<div><div class='controls'><input type='text' class='answerAltRadiobtn' data-type='answer' class='input-fluid' name='txtAnswer"+ n++ +"'> <label class='checkbox'><input type='checkbox' id='QuizCheckbox"+ c++ +"'> Correct Answer</label></div></div>").attr({id: newAnswerAlt, class: ''}).prependTo(".NewQuizAnswersGroup").hide().fadeIn('slow');
    });

在这里,我正在尝试对创建的元素进行克隆,但这需要是唯一的,所以在一个克隆中发生的事情不会影响其他克隆。因此,对于每个新创建的克隆,这就像“从头开始”。

    $("#addNewQuizCreateQuestion").click(function() {
    $("#QuestionCreator").clone().appendTo(".modal-body-createquiz");
    }); 

有没有人暗示在这里做什么?

或者您需要更多代码来获取图片?

非常感谢!

【问题讨论】:

  • 并且还可以在创建的元素之间来回“切换”
  • 你能发个 jsfiddle 吗?
  • 您的选择器如.NewQuizAnswersGroup 可能会在您克隆元素后导致问题
  • 我做了一个jsfiddle.net/QbbFB,但在那里添加新的替代品不起作用。也许它并没有“说那么多……”
  • 所以我需要让像.NewQuizAnswersGroup这样的选择器在我克隆它们时是唯一的?

标签: jquery dynamic


【解决方案1】:

希望对你有所帮助。

JSfiddle

我在这里使用的逻辑是,我正在创建您的第一个 div 的克隆,即“QuestionCreator1”。我保留了一个隐藏字段来保存当前 ID(递增部分)。我使用last() 方法和您的类名“QuestionCreator”来获取最后一个元素。然后在从“QuestionCreator1”克隆后更新其(最后一个元素的 ID)ID。

 $("#addNewQuizCreateQuestion").click(function() {
             var currentId=$("#currentId").val();
            var currentIdInt=parseInt(currentId);
            currentIdInt++;
            $("#currentId").val(currentIdInt);
        $("#QuestionCreator1").clone().appendTo(".modal-body-createquiz");
            $(".QuestionCreator").last().attr("id","QuestionCreator"+currentIdInt);
        }); 

【讨论】:

  • 如果需要更多说明,请告诉我
  • 谢谢!但它仍在创建旧#QuestionCreator 的 100% 克隆,所以如果我在第一个问题中添加“更多替代方案”,它也会在第二个问题上添加更多
  • @Kim,您正在创建 prev 元素的克隆。所以你会得到一个相同的副本。你能再解释一下你的要求吗?
  • 好吧,抱歉,如果我的问题不清楚 :) 我想要实现的是这个。 1.) 创建#QuestionCreator,其中包含测验中的第一个问题。您可以在其中添加任意数量的替代品。 2.) 单击#addNewQuizCreateQuestion 创建一个新问题。不是#QuestionCreator 的克隆,但具有相同的功能。所以在这里你可以在测验中创建问题 2。并以同样的方式添加更多问题。并且还具有在问题 1 和 2、3 等之间“跳动”的能力。
  • 因此,如果我在测验中附加一个新的“替代方案”,它应该附加到新的#QuestionCreator 并以某种方式识别每个问题,例如一个 ID,以便我以后可以得到它们。
猜你喜欢
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多