如何使用 jQuery 将文本和按钮附加到列表项?

How do you append text and a button to a list item with jQuery?

我正在尝试制作一个非常简单的待办事项列表。你输入一些东西,它会被添加到列表中并存储在本地存储中。我的下一步是在每个列表项旁边添加一个按钮,然后我可以使用它来单独删除内容,而不是删除整个列表。我发现了几个关于使用 jQuery 制作按钮的 SO 问题,并试图按照它们进行操作,但是有些东西不正常,因为我没有得到正确的输出。这是代码:

<!DOCTYPE html>
    <!--Project-->
    <html>
        <head>
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
            <script>
                $(document).ready(function() {
                    let list = [];
                    if (localStorage.getItem("mylist") != null) {
                        let array = JSON.parse(localStorage.getItem("mylist"));
                        for (let element of array) {
                            list.push(element);
                            $('#list').append('<li>' + element + '</li>');
                        }
                    }
                    $('button').click(function() {
                        if ((this.id) == "add") {
                            let input = $('#input').val();
                          
                            // making button?
                            let button = $('<button/>', {type:'button', id:input, text:'Delete'});
                            
                            // appending text and button?
                            $('#list').append('<li>' + input + button + '</li>');
                          
                            list.push(input);
                            let json = JSON.stringify(list);
                            localStorage.setItem("mylist", json);
                            $('#input').val('');
                        }
                        else {
                            localStorage.clear();
                            $("#list").empty();
                        }
                        event.preventDefault();
                    });
                });
            </script>
        </head>
        <body>
            <form>
                <input type="text" id="input" placeholder="Enter tasks...">
                <button id="add">Add</button>
                <button id="delete">Delete All</button>
                <br>
                <ul id="list">
                </ul>
              
            </form>
        </body>
    </html>

出于某种原因,我只是从输入框和旁边的 [object Object] 中获取文本。我不太确定该怎么做,因为我无法找到有关如何使用 jQuery 以这种方式创建元素的文档。我正在尝试创建一个按钮,其 ID 与输入文本框中的文本相匹配,这样我以后可以引用该 ID 并使用它来删除内容。也许我应该采取另一种方式来解决这个问题?感谢任何帮助。

你在旁边得到 [object Object],因为你连接的是一个对象,而不是一个字符串(或者一个带有你按钮的 html 代码的字符串,正如预期的那样)。

// Here you are actually creating correctly the button
// making button?
let button = $('<button/>', {type:'button', id:input, text:'Delete'});

// BUT HERE you're passing the button concatenated with the string `input`. That won't work.
// appending text and button?
$('#list').append('<li>' + input + button + '</li>');

这相当于以下内容:

$('#list').append('<li>' + 'any text' + $('<button>') + '</li>');

如您所见,您并没有连接新按钮的 html 代码,而是连接了一个 DOM 元素(实际上是一个 jQuery 对象,但仍然...)。当您尝试将 stringobject 连接时,javascript 会尝试将 object 转换为表示该对象的字符串。这种情况下的转换结果是 '[object Object]'.

解法:

只需将对象的 button 更改为其 html 代码。您只需使用 outerHTML 属性 个 DOM 个元素即可。由于你的 button 对象是一个 jQuery 对象,而 jQuery 对象被视为集合,你需要用 [0] 获取此集合中的第一个对象,然后才调用outerHTML 属性,因为它只适用于标准 javascript 对象(至少如预期的那样)。

// appending text and button?
$('#list').append('<li>' + input + button[0].outerHTML + '</li>');