Я пытаюсь создать оператор if, чтобы эта функция не загружала элементы несколько раз. Проблема начинается с переменной let x = -1. Он складывает все предметы более 10 раз.

function getRecordUI( alias, type, id, viewtype, version ) {

    // Get record model from Data Model Registry
    if ( type ) {
        getJSONUIModel( type,
            function ( data ) {
                displayRecordSections( alias, type, id, version, viewtype, data );
            },
            function (error) {
                console.log("Error getting UI model for type " + type);
                console.log(error);
                displayRecordSections( alias, type, id, version, viewtype, null );
            });
    } else {
        displayRecordSections( alias, type, id, version, viewtype, null );
    }
    let x = -1;
    lastName = "";
    $("#panels-region .panel-heading").each(function () {
        x++

        console.log($(this))
        let curName = $(this).attr("name")
        $('<a id="panels-sidebar-' + curName.replace(/ |\//g, "_") + '" class="w3-bar-item" href="#panel-' + x + '-header" title="' + curName.replace(/ |\//g, "_") + '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' + curName + '</a>').insertAfter("#panels-sidebar" + lastName.replace(/ |\//g, "_"))
        console.log($(this).attr("name"), lastName)
        lastName = "-" + curName
    })

    $("#graph-region .panel-heading h4").each(function () {
        x++
        let x = -1;
        console.log($(this).text())
        let curName = $(this).text().replace("Collapse panelExpand panel", "")
        $('<a id="tree_viewers-sidebar-' + curName.replace(/ |\//g, "_") + '" class="w3-bar-item" href="#panel-' + x + '-header" title="' + curName.replace(/ |\//g, "_") + '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' + curName + '</a>').insertAfter("#tree_viewers-sidebar" + lastName.replace(/ |\//g, "_"))
        console.log($(this).attr("name"), lastName)
        lastName = "-" + curName
    })

    $(".menu-links a").css("padding", "0px 8px")
    $(".panel-body").css("background-color", "white")
    $("#panels-region .panel-wrapper .panel-default").css("background-color", "white")

}
0
damon.ponder 20 Янв 2021 в 23:25

1 ответ

Лучший ответ

Не видя HTML-кода, я мог бы предположить, что JQuery находит 10 экземпляров $ ("# graph-region .panel-heading h4") и много раз перебирает вывод.

Итак, если ваш HTML выглядит примерно так:

<div id='graph-region' class='panel-heading'></div>
<div id='graph-region' class='panel-heading'></div>
<div id='graph-region' class='panel-heading'></div>
<div id='graph-region' class='panel-heading'></div>
<div id='graph-region' class='panel-heading'></div>

Он будет работать

$("#panels-region .panel-heading").each(function () {
    ...your code
}

5 раз.

Если вы хотите запустить его только один раз, вам придется использовать что-то другое, кроме .each. Наверное что-то вроде

let element = $("#panels-region .panel-heading").first()

А затем выполните код, который вы использовали для создания тега привязки, с помощью element.

0
Luke 20 Янв 2021 в 20:48