Почему JavaScript для цикла не увеличивается?

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

Я пытаюсь заменить <li> на 1. 2. 3. соответственно. Мне удалось изменить значение <li> на число, но это число 0 . Цикл не хочет работать. Честно говоря, этот метод может оказаться невозможным.

Взгляните на скрипку, если хотите.

Это мой function(){...} :

 function doIt(){

        var input = document.getElementById("input");
        var li = /<li>/; // match opening li
        var liB = /</li>/; // match closing li
        var numberOfItems = input.value.match(li).length; // number of lis that occur


        for(var i = 0; i < numberOfItems; i  ) {
            insertNumber(i); // execute insertNumber function w/ parameter of incremented i 
        }

        function insertNumber(number){
            input.value = input.value.replace(li, number   "."   " ").replace(liB, "");
        }


    }
 

Я понимаю insertNumber(){...} , что функция не нужна.

Комментарии:

1. numberOfItems не определено.

2. В вашем первом цикле вы заменяете ВСЕ <li> s (на 0)… в вашем 2-м не осталось ничего для замены. Возможно, удалите gi из вашего регулярного выражения.

3. Как сказал @christian314159, после первой итерации <li> в тексте больше ничего нет. Какой-нибудь отладочный код откроет вам это. И, пожалуйста, укажите полный пример кода в вопросе вместо простой ссылки.

4. Рассмотрим такой подход. Это немного проще.

5. .replace() Метод специально допускает функцию в качестве второго аргумента. Его возвращаемое значение становится заменой.

Ответ №1:

Вот альтернативный метод, превращающий содержимое вашей текстовой области HTML в элементы DOM, которыми jQuery может манипулировать, и таким образом управлять ими:

 function doIt() {
    var $domElements = $.parseHTML( $('#input').val().trim() ),
        output = [],
        i = 1;
    $.each($domElements, function(index, element) {
        if($(this).text().trim() != '') {
            output.push( i   '. '   $(this).text().trim() );
            i  ;
        }
    });
    $('#input').val(output.join('n'));
}
 

Комментарии:

1. Кстати, вы также можете сделать output.push(i '....') и удалить лишнюю строку, но это забавно сложно читать

2. Это работает, спасибо! Я действительно ценю помощь, и я обязательно вернусь к этому позже. Я хочу использовать необработанный подход JavaScript, потому что я чувствую, что должен иметь полное представление о языке, прежде чем погружаться в его библиотеку. Я собираюсь использовать метод @cookiemonster.