【问题标题】:jQuery .append() Overwrite Previous .append()jQuery .append() 覆盖前一个 .append()
【发布时间】:2022-01-24 12:52:58
【问题描述】:

我刚刚遇到了一个与 jQuery 和 Javascript 相关的问题。 这是我的(一段)HTML 代码:

<div class="container">
    <input type="text" class="input" id="display-name" placeholder="Display Name">
    <input type="text" class="input" id="username" placeholder="Username">
    <textarea class=" textarea" id="post" placeholder="Write The Posts..."></textarea>
    <br>
    <button type="button" class="button is-info" id="publish-post">Send</button>
</div>
<hr>
<div class="container post-result">
    <p class="subtitle" id="post-status" style="color: darkgray;">No Posts Yet.</p>
</div>

这是我的整个 JavaScript 代码:

$(() => {
    let postCount = 0;
    $("#publish-post").click(() => {
        const displayName = $("#display-name").val();
        const username = $("#username").val().toLowerCase().replaceAll(' ','_');
        const post = $("#post").val();
        const CurrentTime = new Date()
            .toString()
            .split(' ');
        if (username != undefined || post != undefined) {
            let index = "#post-status";
            postCount++;
            console.log(username,post);
            $(index).text(`${postCount.toString()} Posts.`);
            $(index).append(`
            <div class="card post-${postCount}">
                <div class="card-content">
                    <div class="media-content">
                        <p class="subtitle is-4" style="color: darkgray;">Post #${postCount}
                        <p class="title is-4">${displayName}</p>
                        <p class="subtitle is-5" style="color: darkgray;">aciduser/${username}</p>
                    </div>
                    <div class="content">
                        <p>${post}<p>
                    </div>
                </div
            </div>
            `);
        }
    });
});

假设我输入显示名称“Foo”,用户名“Bar”并发布“Foo Bar Baz”,然后单击发送。 是的,它可以工作,但是当我再次输入它而不是覆盖 Foo Bar Baz 并用新值替换它(即使没有新值,只是随机点击),我希望它添加新元素(例如,当我发布“Foo Bar Baz “,它添加元素 Foo Bar Baz 并且当我发布“Bar Foo Baz”时,它会在 Foo Bar Baz 的顶部添加新元素)。我该如何解决这个问题?非常感谢回答的人:)

【问题讨论】:

  • 认为(在那些 Random Caps 让我头疼之后)你的意思是当你添加一个新的“帖子”时,旧的“帖子”会被删除并且你想保留旧帖子。如果是这样,请将 $(index).text(${postCount.toString()} Posts.); 更改为 .append(,因为 .text 将首先清除您的 $(index)
  • 我知道这与您的问题无关,但不应该 if (username != undefined || post != undefined)if (username ! = 未定义 && 发布!= 未定义)。只是说这可能会分散您的注意力
  • @freedomn-m 是的,我的随机大写习惯很烦人,甚至让我自己也很烦。对不起。

标签: javascript html jquery


【解决方案1】:

在父 div 中追加输出。

$(index).text(`${postCount.toString()} Posts.`);
$(index).parent().append(`

点击JsFiddle查看或运行片段

$(() => {
    let postCount = 0;
    $("#publish-post").click(() => {
        const displayName = $("#display-name").val();
        const username = $("#username").val().toLowerCase().replaceAll(' ','_');
        const post = $("#post").val();
        const CurrentTime = new Date()
            .toString()
            .split(' ');
        if (username != undefined || post != undefined) {
            let index = "#post-status";
            postCount++;
            console.log(username,post);
            $(index).text(`${postCount.toString()} Posts.`);
            $(index).parent().append(`
            <div class="card post-${postCount}">
                <div class="card-content">
                    <div class="media-content">
                        <p class="subtitle is-4" style="color: darkgray;">Post #${postCount}
                        <p class="title is-4">${displayName}</p>
                        <p class="subtitle is-5" style="color: darkgray;">aciduser/${username}</p>
                    </div>
                    <div class="content">
                        <p>${post}<p>
                    </div>
                </div
            </div>
            `);
        }
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
    <input type="text" class="input" id="display-name" placeholder="Display Name">
    <input type="text" class="input" id="username" placeholder="Username">
    <textarea class=" textarea" id="post" placeholder="Write The Posts..."></textarea>
    <br>
    <button type="button" class="button is-info" id="publish-post">Send</button>
</div>
<hr>
<div id="post-result" style="color: darkgray;" class="container post-result">
    <p class="subtitle" id="post-status" style="color: black;">No Posts Yet.</p>
</div>

【讨论】:

    【解决方案2】:

    $(index).text(`${postCount.toString()} Posts.`);
    

    每次发布​​时都会替换内容,然后在此之后进行附加。如果您移动 postCount.toString() 帖子。到追加,那么你将有一个正在运行的日志,而不是覆盖之前的结果。添加了一些标签。

    $(() => {
        let postCount = 0;
        $("#publish-post").click(() => {
            const displayName = $("#display-name").val();
            const username = $("#username").val().toLowerCase().replaceAll(' ','_');
            const post = $("#post").val();
            const CurrentTime = new Date()
                .toString()
                .split(' ');
            if (username != undefined || post != undefined) {
                let index = "#post-status";
                postCount++;
                console.log(username,post);
                $(index).prepend(`${postCount.toString()} Posts.
                <div class="card post-${postCount}">
                    <div class="card-content">
                        <div class="media-content">
                            <p class="subtitle is-4" style="color: darkgray;">Post #${postCount}
                            <p class="title is-4">Display Name:  ${displayName}</p>
                            <p class="subtitle is-5" style="color: darkgray;">User Path:  aciduser/${username}</p>
                        </div>
                        <div class="content">
                            Content:
                            <p>${post}<p>
                        </div>
                    </div
                </div>
                `);
            }
        });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="container">
        <input type="text" class="input" id="display-name" placeholder="Display Name">
        <input type="text" class="input" id="username" placeholder="Username">
        <textarea class=" textarea" id="post" placeholder="Write The Posts..."></textarea>
        <br>
        <button type="button" class="button is-info" id="publish-post">Send</button>
    </div>
    <hr>
    <div class="container post-result">
        Post History:
        <p class="subtitle" id="post-status" style="color: darkgray;"></p>
    </div>

    您是否正在寻找类似的东西?

    【讨论】:

    • 您的回答应该包括对您的更改的一些解释。不要指望每个人都做逐行比较。
    • @SScotti 是的,谢谢,但是如何才能将最新帖子放在顶部而不是底部?
    • 我刚刚编辑并将附加更改为前置,颠倒了顺序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2023-03-17
    • 2014-09-15
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多