Использование createTextNode(), но мне нужно добавить HTML-теги к нему (JavaScript/JQuery)

Когда я щелкаю элемент в таблице, он мне нужен, чтобы добавить этот элемент в список и отобразить этот список.

Вот мой код для добавления / отображения элементов в списке:

    var myList = document.getElementById('my-list');

    function addItemToList(id) {

        var entry = document.createElement('li');

        entry.appendChild(document.createTextNode(id));
        myList.appendChild(entry);

    };

Это прекрасно работает, но мне также нужно добавить кнопку "удалить" для каждого элемента в списке.

Но когда я добавляю + ' <a href="#">delete</a>' к createTextNode() параметр, это не работает. Это потому, что, очевидно, textNodes может иметь только простой текст.

Так как мне заставить этот код работать с тегом HTML? Есть ли другой метод JS или Jquery, кроме createTextNode() что будет делать то же самое, но разрешить теги HTML?

3 ответа

Решение

Я не уверен, есть ли какие-то конкретные причины, по которым вы используете createTextNode() или избегать селекторов jQuery, но если это просто потому, что вы новичок в jQuery в целом, то этот фрагмент кода содержит некоторые обновления с лучшими методиками и решает вашу проблему. Надеюсь, поможет!

var $myList = $('#my-list');

function addItemToList(id) {
  var $deleteLink = $('<a href="#">Delete</a>');
  $deleteLink.on('click', function(e) {
    e.preventDefault();
    $(this).parent().remove()
  })
  
  var $entry = $('<li>'+id+'</li>')
  $entry.append($deleteLink)

  $myList.append($entry);

};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul id="my-list">
  
</ul>

<a href="#" onClick="addItemToList(1)">Add Item</a>

С конкретным сценарием, который вы упоминаете, вы просто установите innerHTML из li

entry.innerHTML = id + ' <a href="#">delete</a>'

В противном случае, либо создайте элемент, как вы сделали для li, но используя a вместо этого, и добавьте его. Или просто использовать insertAdjacentHTML() добавить все это

Создание элемента

var entry = document.creatElement('li');
entry.appendChild(document.createTextNode(id));

var link = document.createElement('a');
link.href = "#";
link.innerText = "delete";
entry.appendChild(link);

Использование insertAdjacentHTML

entry.insertAdjacentHTML('beforeend',id + ' <a href="#">delete</a>');

демонстрация

var id = "Some Text";
var list = document.querySelector("ul");
var entry = document.createElement("li");
entry.insertAdjacentHTML("beforeend", `${id} <a href="#">delete</a>`);

list.appendChild(entry);
<ul></ul>

Кроме того, поскольку вы пометили JQuery, вы можете сделать то же самое, что и insertAdjacentHTML но, позвонив в JQuery's append() метод

$(entry).append( id + ' <a href="#">delete</a>' );

Одна возможность будет:

function addItemToList(id) {

    var entry = document.createElement('li');

    entry.innerHTML = id + '<a href="#">delete</a>';
    myList.appendChild(entry);

};
Другие вопросы по тегам