Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Обработка определенных тегов в тексте помещенном в textarea (для оглавления) (https://javascript.ru/forum/jquery/69460-obrabotka-opredelennykh-tegov-v-tekste-pomeshhennom-v-textarea-dlya-oglavleniya.html)

Stenli 27.06.2017 09:21

Цитата:

Сообщение от рони
$('p', div).remove()

Да, так тоже пробовал. Не работает.

$(document).ready(function() {

            var ToC = '<nav role="navigation" class="table-of-contents">' + '<ul>';
            var newLine, el, title, pel;


            $('#sendTo').on('click', function () {

                var insertData = $('#insertArea').val();
                var div = $("<div>", {html : insertData});

                $(':header', div).each(function (i,el) {
                    el = $(el);
                    var title = el.text();
                    /*el.attr('id' , title).html(title);*/
                    el.html('<a id="' + title + '"></a>'+title);

                    newLine = '<li>' + '<a href="#' + title + '">' + title + '</a>' + '</li>';
                    ToC += newLine;
                });

                ToC += '</ul>' + '</nav>' + div.html();
                $('#pastArea').val(ToC);

                $('p', div).remove();

            });
        });


Спасибо за разъяснения.

рони 27.06.2017 09:25

Stenli,
25 строка должна идти до 22! перенесите в 21 или в 11

Stenli 18.07.2017 11:56

Кое-что изменил, добавив FOR, чтобы добавлял к анкорам не кириллицу а некий текст с приставкой +1.

$(':header', div).each(function (i,el) {
                el = $(el);
                var title = el.text();

                /*el.attr('id' , title).html(title);*/

                for (var e=0; e < i+1; e++ ) {
                    var z=e+1;
                    el.html('<a id="' + z + '_toc' + '"></a>'+title);
                    newLine = '<li>' + '<a href="#' + z + '_toc' + '">' + title + '</a>' + '</li>';
                }
                ToC += newLine;
            });


Работает, только я не совсем уверен на счет правильности внутри цикла , где сравнивается e < i+1, что i+1 это правильно. Само как-то получилось. И можно ли в такую конструкцию вообще вкладывать FOR?

рони 18.07.2017 12:30

Цитата:

Сообщение от Stenli
И можно ли в такую конструкцию вообще вкладывать FOR?

в данном случае FOR бесполезен, и лучше бы его убрать!

рони 18.07.2017 12:47

Stenli,
$(":header", div).each(function(i, el) {
    el = $(el);
    var title = el.text();
    var id = ++i + "_toc";
    var a = $("<a>",{id : id, text : title});
    el.html(a);
    ToC += "<li><a href='#"+id+"'>" + title + "</a></li>"
});

Stenli 18.07.2017 17:37

Цитата:

Сообщение от рони (Сообщение 458916)
в данном случае FOR бесполезен, и лучше бы его убрать!

Спасибо, буду разбирать.
А почему бесполезен, ведь он работает?
Ошибка может возникнуть?

рони 18.07.2017 17:50

Цитата:

Сообщение от Stenli
А почему бесполезен, ведь он работает?

да, но это не код, вместо того чтобы покрасить сразу в зелёный, вы красите, за каким-то, во все цвета перед зелёным.


Часовой пояс GMT +3, время: 00:46.