Произведите направляющуюся иерархию как заказанную список

Похоже, что все ваши проекты настроены на использование интерпретатора системы вместо virtual environment, который вы настроили для каждого из них.

Следуйте этой инструкции, чтобы исправить это https://www.jetbrains.com/help/pycharm-edu/creating-virtual-environment.html

С точки зрения используя другую версию библиотеки python, вы можете решить эту проблему, указав ее в файле requirements.txt, который вы можете поместить в папку venv для каждого проекта. тогда вы можете просто сделать pip install -r requirements.txt после того, как настроите venv. (вам нужно убедиться, что venv активирован - вам не нужно об этом беспокоиться, если вы настроили проект в PyCharm для использования интерпретатора python для venv.) Вы можете проверить это, перейдя к Terminal в вашем PyCharm и вы должны увидеть (venv_name) hostusername@host:~/project_folder$

6
задан James 30 January 2009 в 21:58
поделиться

2 ответа

Во-первых, создайте дерево. Псевдокод (потому что я не бегло говорю на JavaScript):

var headings = array(...);
var treeLevels = array();
var treeRoots = array();

foreach(headings as heading) {
    if(heading.level == treeLevels.length) {
        /* Adjacent siblings. */

        if(heading.level == 1) {
            treeRoots[] = heading;  // Append.
        } else {
            treeLevels[treeLevels.length - 2].children[] = heading;  // Add child to parent element.
        }

        treeLevels[treeLevels.length - 1] = heading;
    } else if(heading.level > treeLevels.length) {
        /* Child. */

        while(heading.level - 1 > treeLevels.length) {
            /* Create dummy headings if needed. */
            treeLevels[] = new Heading();
        }

        treeLevels[] = heading;
    } else {
        /* Child of ancestor. */

        treeLevels.remove(heading.level, treeLevels.length - 1);

        treeLevels[treeLevels.length - 1].children[] = heading;
        treeLevels[] = heading;
    }
}

Затем, мы поперечный это, создавая список.

function buildList(root) {
    var li = new LI(root.text);

    if(root.children.length) {
        var subUl = new UL();
        li.children[] = subUl;

        foreach(root.children as child) {
            subUl.children[] = buildList(child);
        }
    }

    return li; 
}

Наконец, вставьте LI возвращенный buildList в a UL для каждого treeRoots.

В jQuery можно выбрать элементы заголовка в порядке как таковом:

var headers = $('*').filter(function() {
    return this.tagName.match(/h\d/i);
}).get();
2
ответ дан 17 December 2019 в 02:34
поделиться

Проблема здесь состоит в том, что нет никакого хорошего способа получить заголовки в порядке документа. Например, вызов jQuery $('h1,h2,h3,h4,h5,h6') возвратит все Ваши заголовки, но все <h1>s будет на первом месте сопровождаемый <h2>s, и так далее. Никакая основная основа все же не возвращает элементы в порядке документа при использовании разграниченных селекторов запятой.

Вы могли преодолеть эту проблему путем добавления общего класса к каждому заголовку. Например:

<h1 class="heading">Heading level 1</h1>

    <h2 class="heading">Sub heading #1</h2>

    <h2 class="heading">Sub heading #2</h2>

        <h3 class="heading">Sub Sub heading</h3>

    <h2 class="heading">Sub heading #3</h2>

    ...

Теперь селектор $('.heading') получит их всех в порядке.

Вот то, как я сделал бы это с jQuery:

var $result = $('<div/>');
var curDepth = 0;

$('h1,h2,h3,h4,h5,h6').addClass('heading');
$('.heading').each(function() {

    var $li = $('<li/>').text($(this).text());

    var depth = parseInt(this.tagName.substring(1));

    if(depth > curDepth) { // going deeper

        $result.append($('<ol/>').append($li));
        $result = $li;

    } else if (depth < curDepth) { // going shallower

        $result.parents('ol:eq(' + (curDepth - depth - 1) + ')').append($li);
        $result = $li;

    } else { // same level

        $result.parent().append($li);
        $result = $li;

    }

    curDepth = depth;

});

$result = $result.parents('ol:last');

// clean up
$('h1,h2,h3,h4,h5,h6').removeClass('heading');

$result должен теперь быть Ваш <ol>.

Кроме того, обратите внимание, что это обработает <h4> сопровождаемый <h1> (спускающий больше чем одного уровня сразу), но это не обработает <h1> сопровождаемый <h4> (больше чем один выравнивает за один раз).

3
ответ дан 17 December 2019 в 02:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: