Javascript замена элементов на входы и текстовые поля - PullRequest
0 голосов
/ 26 марта 2020

Я создаю своего рода редактор мини-блоков для моего блога Wordpress на веб-интерфейсе, где я пытаюсь использовать javascript для преобразования всех элементов из содержимого публикации в набор входных данных и текстовых полей.

Сначала я создаю фиктивный элемент и добавляю к нему содержимое поста из php:

var dummy = document.createElement( 'div' );
dummy.innerHTML = '<?php echo $text; ?>';
console.log(dummy.innerHTML);

sample data

Тогда для каждого элемента там я запускаю этот вид заменителя, который должен добавить входные данные и текстовые области на место элемента и удалить сам элемент.

var els = dummy.childNodes;
for(i = 0; i < els.length; i++) {

    var text = els[i].textContent;

    if (els[i].tagName.toLowerCase() == ("h2" || "h3" || "h4" || "h5" || "h6")) {

        // Create an input
            var input = document.createElement("input");
            input.type = "text";
            input.value = text;
            input.setAttribute("class","h");
            els[i].parentNode.insertBefore(input, els[i]);

    } else if (els[i].tagName.toLowerCase() == ("p" || "div")) {

        // Create a textarea
            var textarea = document.createElement("textarea");
            textarea.value = text;
            textarea.setAttribute("class","p");
            els[i].parentNode.insertBefore(textarea, els[i]);

    } else if (els[i].tagName.toLowerCase() == "li") {

        // Create an input with class li
            var input = document.createElement("input");
            input.type = "text";
            input.value = text;
            input.setAttribute("class","li");
            els[i].parentNode.insertBefore(input, els[i]);
    }

    els[i].parentNode.removeChild(els[i]);
}

В конце я проверяю результат и добавляю его в свой контейнер. Тем не менее, результаты меня смущают:

  • h3 исчезает полностью
  • div и p есть
  • нет входных данных или textarea в результате
  • нет ошибок в консоли

results

console.log(dummy.innerHTML);
document.getElementsByClassName('compositecontent')[0].innerHTML = dummy.innerHTML;

1 Ответ

0 голосов
/ 26 марта 2020

Хорошо, поэтому у меня было недопустимое выражение сравнения, вместо:

els[i].tagName.toLowerCase() == ("h2" || "h3" || "h4" || "h5" || "h6")

правильный подход:

["H2","H3","H4","H5","H6"].indexOf(el[i].tagName.toUpperCase()) != -1

Поскольку первое выражение всегда упрощается до первого элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...