клон не работает должным образом - PullRequest
1 голос
/ 12 октября 2011

Я пытаюсь этот код, но, видимо, у меня есть ошибка.

Проблема здесь, потому что без этой части все работает правильно:

        .find('ol:first >li:eq(0)')
        .attr('id', 'one' + increment)
        .find('ol:first >li:eq(1)')
        .attr('id', 'two' + increment)

полный источник:

<div id="container">
<div id="input0" class="clonedInput">
<br>
    <ol id="vall0">
    <li id="one0">one</li>
    <li id="two0">two</li>
    </ol>
<input id="value0" size="20" type="text"/>
</div>
</div>

    <script type="text/javascript">
      $(document).ready(function() {
    var $container = $('#container'),

        $clone = $('#input0'),

        numClones = 4,

        startNumber = 1;

    function cloneInput(num, increment, $elem) {
        var $newElem = $elem
        .clone(true)
        .attr('id', 'input' + increment)
        .find('ol:first')
        .attr('id', 'vall' + increment)
        .find('ol:first >li:eq(0)')
        .attr('id', 'one' + increment)
        .find('ol:first >li:eq(1)')
        .attr('id', 'two' + increment)
        .end();

        $newElem.children(':text')
        .prop('id', "value" + increment)
        .prop('valor', 'valor')
        .val('');


        $container.append($newElem);

        if (num > 1) {
            var next = num - 1;
            var incr = increment + 1;
            cloneInput(next, incr, $elem);
        }
    }

    cloneInput(numClones, startNumber, $clone);
    });
        </script>

демо

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

Одним из возможных решений является изменение вашей проблемной части на:

.find('>li:eq(0)')
.attr('id', 'one' + increment)
.end()
.find('>li:eq(1)')
.attr('id', 'two' + increment)
.end()

Также см. Мой jsfiddle .

0 голосов
/ 12 октября 2011

.end() может не делать то, что вы думаете.

Вам не нужно вызывать его в конце цепочки jQuery-вызовов.

Что делает .end(), так это то, что он эффективно «возвращает» вас назад к предыдущему результату / области фильтра. Последующие вызовы .find() будут выполнять выбор поверх фильтруемых в данный момент элементов. Поиграйте с добавлением .end() звонков, прежде чем делать дополнительные .find() звонки:

    .clone(true)
    .attr('id', 'input' + increment).end()
    .find('ol:first')
    .attr('id', 'vall' + increment).end()
    .find('ol:first >li:eq(0)')
    .attr('id', 'one' + increment).end()
    .find('ol:first >li:eq(1)')
    .attr('id', 'two' + increment).end()

Однако я должен сказать, что вы неэффективно используете селекторы jQuery ...

...