【问题标题】:How to create infinitely incrementing elements efficiently?如何有效地创建无限递增的元素?
【发布时间】:2016-03-15 07:39:18
【问题描述】:

假设我在 html 页面上有一个按钮,并且该按钮使用 jQuery 将内容附加到页面(在 jQuery Mobile 环境中)。

我需要一种附加无限多内容 div 的方法,该方法类似于计数器系统,因此可以将生成的第一个内容 div 标记为第一个内容 div 然后可以将下一个标记为第二个,依此类推。

我尝试使用递增的唯一 ID 执行此操作,但它变成了一场噩梦。

怎么样?

假设我添加了 3 个内容 div,但我不喜欢内容 #2,所以我删除了 #2。然后 Content #3 变为 Content #2,因此每个元素都必须更改其 id。

当只有 3 个内容 div 时,这并不复杂,但假设有 30 个内容 div:您删除内容 #2,现在其他 28 个内容 div 必须更改其所有唯一 ID .

最重要的是,在每个内容 div 中,假设有 30 个元素也需要更改其所有唯一 ID。

因此,噩梦。

编辑:这是我上次尝试执行此操作时的一些代码:

//Question Type Visibility
$(document).on("pageinit","#createSurvey", function(){

$("#container").empty();

//Reset qCount
qCount = 0;

$(document).undelegate('#addQ', 'click').delegate('#addQ', 'click', function() {

    //Increment question counter
    qCount++;

    $('\
        <div id="newQ' + qCount + '" style="text-align: center !important; -webkit-transform: translateZ(0) !important;">\
            <h2 id="num' + qCount + '" style="color: #52D273;">Question ' + qCount + '</h2>\
            \
            <!--Question Title-->\
            <label id="qTitleLabel' + qCount + '" for="qTitle" class="ui-hidden-accessible">\
                Question Title:\
            </label>\
            <input type="text" name="qTitle[]" id="qTitle' + qCount + '" placeholder="Question Title" required>\
                <br>\
            <h3 id="cat' + qCount + '" style="color: #46BCE1;">Question Category</h3>\
            \
            <!--Question Category-->\
            <label id="qCatLabel' + qCount + '" for="qCat' + qCount + '" class="ui-hidden-accessible">\
                Question Category:\
            </label>\
            <select name="addQCat[]" id="addQCat' + qCount + '" class="' + qCount + '">\
                <option selected disabled hidden value=\'\'>Pick a Category</option>\
                <option value="Category 1">Category 1</option>\
                <option value="Category 2">Category 2</option>\
                <option value="Category 3">Category 3</option>\
                <option value="Category 4">Category 4</option>\
                <option value="Category 5">Category 5</option>\
            </select>\
                <br>\
            <h3 id="type' + qCount + '" style="color: #46BCE1;">Question Type</h3>\
            \
            <!--Question Type-->\
            <label id="qTypeLabel' + qCount + '" for="addQType' + qCount + '" class="ui-hidden-accessible">\
                Question Type:\
            </label>\
            <select name="addQType[]" id="addQType' + qCount + '" class="' + qCount + '">\
                <option selected disabled hidden value=\'\'>Pick a Type</option>\
                <option value="smallTextDiv">Small Text</option>\
                <option value="tORfDiv">True or False?</option>\
                <option value="dropdownDiv">Dropdown</option>\
                <option value="numDiv">Number</option>\
                <option value="radDiv">Radio Buttons</option>\
                <option value="largeTextDiv">Large Text</option>\
                <option value="checkDiv">Checkboxes</option>\
            </select>\
            \
            <!--Small Text-->\
            <div id="smallTextDiv' + qCount + '" class="types' + qCount + '">\
                <h2 id="previewSmallText' + qCount + '">Preview</h2>\
                <label id="addQSmallTextLabel' + qCount + '" for="addQSmallText' + qCount + '" class="ui-hidden-accessible">\
                    Preview:\
                </label>\
                <input type="text" name="addQSmallText' + qCount + '" id="addQSmallText' + qCount + '" placeholder="The user would type their answer in here...">\
            </div>\
            \
            <!--True/False-->\
            <div id="tORfDiv' + qCount + '" class="types' + qCount + '">\
                <h2 id="previewTOrF' + qCount + '">Preview</h2>\
                <div id="switchContainer' + qCount + '">\
                    <label id="switchLabel' + qCount + '" for="switch' + qCount + '" class="ui-hidden-accessible">\
                        Preview (A.K.A. On/Off):\
                    </label>\
                    <input type="checkbox" data-role="flipswitch" name="switch' + qCount + '" id="switch' + qCount + '" data-on-text="True" data-off-text="False">\
                </div>\
                \
                <label id="replaceOffLabel' + qCount + '" for="replaceOff' + qCount + '" class="ui-hidden-accessible">\
                    Replace Off:\
                </label>\
                <input type="text" name="replaceOff' + qCount + '" id="replaceOff' + qCount + '" placeholder="Replace Off Text">\
                \
                <label id="replaceOnLabel' + qCount + '" for="replaceOn' + qCount + '" class="ui-hidden-accessible">\
                    Replace On:\
                </label>\
                <input type="text" name="replaceOn' + qCount + '" id="replaceOn' + qCount + '" placeholder="Replace On Text">\
                \
                <label id="replaceTextLabel' + qCount + '" for="replaceText' + qCount + '" class="ui-hidden-accessible">\
                    Replace Text:\
                </label>\
                <input type="button" value="Replace Text" id="replaceText' + qCount + '" class="' + qCount + '" style="background-color: blue;">\
                \
                <!--True or False: Off Text-->\
                <input type="hidden" name="offTxt[]" id="offTxt' + qCount + '">\
                \
                <!--True or False: On Text-->\
                <input type="hidden" name="onTxt[]" id="onTxt' + qCount + '">\
            </div>\
            \
            <!--Dropdown-->\
            <div id="dropdownDiv' + qCount + '" class="types' + qCount + '">\
                <h2 id="previewDropDown' + qCount + '">Preview</h2>\
                <div id="dropdownContainer' + qCount + '" class= ' + qCount + '>\
                    <label id="addQDropDownLabel' + qCount + '" for="addQDropDown' + qCount + '" class="ui-hidden-accessible">\
                        Preview:\
                    </label>\
                    <select name="addQDropDown' + qCount + '" id="addQDropDown' + qCount + '" class="0">\
                        <option selected disabled hidden value=\'\'>Make your Choice</option>\
                        <option value="Choice 1">Choice 1</option>\
                    </select>\
                </div>\
                    <br>\
                <label id="addChoiceLabel' + qCount + '" for="addChoice' + qCount + '" class="ui-hidden-accessible">\
                    Add Choice:\
                </label>\
                <input type="button" value="Add Choice" id="addChoice' + qCount + '" class="' + qCount + '" style="background-color: gold;">\
                \
                <div id="choicesContainer' + qCount + '"></div>\
                <label id="updateChoicesLabel' + qCount + '" for="updateChoices' + qCount + '" class="ui-hidden-accessible">\
                    Update Choices:\
                </label>\
                <input type="button" value="Update Choices" id="updateChoices' + qCount + '" class="' + qCount + '" style="background-color: blue;">\
                \
                <input type="hidden" name="choiceCounter[]" id="choiceCounter' + qCount + '">\
            </div>\
            \
            <!--Number-->\
            <div id="numDiv' + qCount + '" class="types' + qCount + '">\
                <h2 id="previewNum' + qCount + '">Preview</h2>\
                <div id="numContainer' + qCount + '" class="' + qCount + '">\
                    <label id="addQNumLabel' + qCount + '" for="addQNum' + qCount + '" class="ui-hidden-accessible">\
                        Number:\
                    </label>\
                    <input type="range" name="addQNum' + qCount + '" id="addQNum' + qCount + '" value="5" min="0" max="10"  data-popup-enabled="true" data-highlight="true">\
                </div>\
                \
                <label id="replaceMinLabel' + qCount + '" for="replaceMin' + qCount + '" class="ui-hidden-accessible">\
                    Replace Min:\
                </label>\
                <input type="number" name="replaceMin' + qCount + '" id="replaceMin' + qCount + '" placeholder="Replace Minimum Number">\
                \
                <label id="replaceMaxLabel' + qCount + '" for="replaceMax' + qCount + '" class="ui-hidden-accessible">\
                    Replace Max:\
                </label>\
                <input type="number" name="replaceMax' + qCount + '" id="replaceMax' + qCount + '" placeholder="Replace Maximum Number">\
                \
                <label id="replaceNumsLabel' + qCount + '" for="replaceNums' + qCount + '" class="ui-hidden-accessible">\
                    Replace Nums:\
                </label>\
                <input type="button" value="Replace Min/Max" id="replaceNums' + qCount + '" class="' + qCount + '" style="background-color: blue;">\
                \
                <!--Number: Min Text-->\
                <input type="hidden" name="minTxt[]" id="minTxt' + qCount + '">\
                \
                <!--Number: Max Text-->\
                <input type="hidden" name="maxTxt[]" id="maxTxt' + qCount + '">\
            </div>\
            \
            <!--Radio Buttons-->\
            <div id="radDiv' + qCount + '" class="types' + qCount + '">\
                <h2 id="previewRadio' + qCount + '">Preview</h2>\
                <div id="radsContainer' + qCount + '" class="0">\
                    <fieldset id="radsSet' + qCount + '" data-role="controlgroup">\
                        <label for="rad1' + qCount + '">\
                            Button 1\
                        </label>\
                        <input type="radio" name="rad1' + qCount + '" id="rad1' + qCount + '" class="rads' + qCount + '" value="rad1">\
                    </fieldset>\
                </div>\
                    <br>\
                <label id="addRadLabel' + qCount + '" for="addRad' + qCount + '" class="ui-hidden-accessible">\
                    Add Radio Button:\
                </label>\
                <input type="button" value="Add Radio Button" id="addRad' + qCount + '" class="' + qCount + '" style="background-color: gold;">\
                <div id="btnContainer' + qCount + '" />\
                <label id="updateRadsLabel' + qCount + '" for="updateRads' + qCount + '" class="ui-hidden-accessible">\
                    Update Radio Buttons:\
                </label>\
                <input type="button" value="Update Radio Buttons" id="updateRads' + qCount + '" class="' + qCount + '" style="background-color: blue;">\
                \
                <input type="hidden" name="radCounter[]" id="radCounter' + qCount + '">\
            </div>\
            \
            <!--Large Text-->\
            <div id="largeTextDiv' + qCount + '" class="types' + qCount + '">\
                <h2 id="previewLargeText' + qCount + '">Preview</h2>\
                <label for="addQLargeText' + qCount + '" class="ui-hidden-accessible">\
                    Large Text:\
                </label>\
                <textarea name="addQLargeText' + qCount + '" id="addQLargeText' + qCount + '" placeholder="The user would type their answer in here..."></textarea>\
            </div>\
            \
            <!--Checkbox-->\
            <div id="checkDiv' + qCount + '" class="types' + qCount + '">\
                <h2 id="previewCheck' + qCount + '">Preview</h2>\
                <div id="checksContainer' + qCount + '" class="0">\
                    <fieldset id="checksSet' + qCount + '" data-role="controlgroup">\
                        <label for="check1' + qCount + '">\
                            Checkbox 1</label>\
                        <input type="checkbox" name="check1' + qCount + '" id="check1' + qCount + '" class="checks' + qCount + '" value="check1">\
                    </fieldset>\
                </div>\
                    <br>\
                <label id="addChecksLabel' + qCount + '" for="addChecks' + qCount + '" class="ui-hidden-accessible">\
                    Add Checkbox Button:\
                </label>\
                <input type="button" value="Add Checkbox" id="addCheck' + qCount + '" class="' + qCount + '" style="background-color: gold;">\
                \
                <div id="boxContainer' + qCount + '" />\
                <label id="updateChecksLabel' + qCount + '" for="updateChecks' + qCount + '" class="ui-hidden-accessible">\
                    Update Checkboxes:\
                </label>\
                <input type="button" value="Update Checkboxes" id="updateChecks' + qCount + '" class="' + qCount + '" style="background-color: blue;">\
                \
                <input type="hidden" name="checkCounter[]" id="checkCounter' + qCount + '">\
            </div>\
            <br>\
            <div id="delQDiv' + qCount + '">\
                <label id="delQLabel' + qCount + '" for="delQ' + qCount + '" class="ui-hidden-accessible">\
                    Delete Question\
                </label>\
                <input type="button" value="Delete Question" id="delQ' + qCount + '" class="'+ qCount +'" style="background-color: red !important;"></div>\
            </div>').hide().appendTo("#container").fadeIn(1000).enhanceWithin();

【问题讨论】:

  • 在这里发布代码。让我们一睹您的噩梦。
  • 元素是否需要有唯一的 ID?请描述您最终要实现的目标。可能有更有效的方法来处理您的情况。
  • @VictorLevin 代码按要求发布。
  • @showdev 是的,我相信他们需要唯一的 id,因为每个内容 div 中的大量元素需要按照输入表单的顺序存储在数据库中(因此,如果有 3调查中的问题,那么与第一个问题相关的所有元素都将通过其 id 标识,然后存储,然后与第二个问题相关的所有元素将通过其 id 标识,然后存储,以此类推。 .
  • 你说得对,这是你为自己制造的一场噩梦。也许如果您解释如何在数据库中提交/存储调查数据,它可能会让我知道您哪里出错了。据我所知,您不需要增加 id,您只需要在提交表单时计算问题容器 div 的实例。当用户在中间删除一个问题时,只需通过迭代容器 divs.... 再次更改 h2 文本....

标签: jquery html jquery-mobile append infinite


【解决方案1】:

身份证号码不连续真的很重要吗?如果是,请等到您保存后再重新编号。

如果您只想知道数字,请执行以下操作:

var count =   $("div").length; 

只要确定

【讨论】:

  • 我相信它们必须是连续的,因为假设这是一个用户可以添加问题的调查表;用户添加了 3 个问题,不喜欢第二个问题,因此用户删除了第二个问题。然后问题 #3 必须重新编号,问题 3 中的所有单个元素也是如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 2022-01-13
相关资源
最近更新 更多