使用javascript函数将复杂的HTML附加到div?

Posted

技术标签:

【中文标题】使用javascript函数将复杂的HTML附加到div?【英文标题】:Appending Complex HTML to div with javascript function? 【发布时间】:2020-02-22 18:42:08 【问题描述】:

我正在尝试创建一个 javascript 函数,它将复杂的 html 附加到已经存在的 div 中(“复杂”意味着不仅仅是像

这样的单个元素

等)。我不能将整个 div 放在 .innerHTML(“div”) 的 () 中而不将其注册为错误,因为所有导致 JS 停止将内容作为字符串读取的符号。有什么建议吗?有没有办法让我在我的 HTML 文件中创建元素并隐藏它,直到它被 javascript 中的函数触发?谢谢! (下面是html和js)

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href= "style.css">
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
   <div class = "row r1">
        <div class = "col-md-3"></div>
        <div class = "col-md-6">
        <h1>Your Password Generator</h1>
        </div>
        <div class = "col-md-3"></div>
    </div>

    <br><br><br>

    <div class = "row r2">
        <div class = "col-md-3"></div>
        <div class = "col-md-6 hello">
            <p>Hello, friend. Welcome to your new password generator. <br> Click "continue" to customize your password.</p>
        </div>
        <div class = "col-md-3"></div>
    </div>

    <br> <br>

    <div class = "row r3">
        <div class = "col-md-3"></div>
        <div class = "col-md-6">
            <div class = "cntrContent"></div>
        </div>
        <div class = "col-md-3"></div>
    </div>

    <div class = "characterSelect">
        </div><div class = "text-center">
       <div class="form-check">
            <input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
            <label class="form-check-label" for="defaultCheck1">
              Special Characters
            </label> <br> 
            <input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
            <label class="form-check-label" for="defaultCheck1">
              Numbers
            </label> <br> 
            <input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
            <label class="form-check-label" for="defaultCheck1">
              Letters
            </label> 
    </div>


    <br> <br> 

    <div class = "row r4">
        <div class = "col-md-3"></div>
        <div class = "col-md-6">
            <div class= "text-center">
                <button type="button" class="btn btn-light button">Continue</button>
            </div>
        </div>   
        <div class = "col-md-3"></div>
    </div>

      <!-- initial display: "Hello, friend. Welcome to your new password generator. Click "continue" to customize your password
    then: new display, the question: "which kinds of characters would you like to include in your password?" followed by 
    list with checkboxes for "special character" "numbers" and "letters". this is followed by a "generate my password" button.
    their selections will run through conditionals with event listeners. the next page will display the password under header "your password"
    then a button below, "copy password to clipboard" and another button that says "i want another password" which brings
    user back to customization options.-->




        <script src="./script.js"></script>

JS:

var promptMsg = document.querySelector(".hello");
var cntrContent = document.querySelector(".cntrContent");
var button = document.querySelector(".button");
var characterSelect = document.querySelector(".characterSelect")




$(".button").on("click", function() 
    $(promptMsg).text("What kinds of characters would you like to include in your password?");
   $(characterSelect).innerHTML("THIS IS WHERE I AM TRYING TO APPEND THE DIV CLASSNAME 'characterSelect'")


) 

【问题讨论】:

这里是我尝试添加 div 的地方: $(".button").on("click", function() $(promptMsg).text("什么样的字符会您想在密码中包含吗?"); $(cntrContent).innerHTML("MULTIFACETED DIV HERE"); 有没有更直接的方法来解决这个问题? 你能给我们看一些代码吗? 如果不发布您的一些代码和您尝试过的内容,您将不会得到有意义的答案。 这里是 html: @user72503948573038 使用代码(格式化)更新您的原始帖子。还有你想达到什么目的? 【参考方案1】:

您正在将 jquery 方法与 JS 方法混合使用。


在你的情况下,我建议使用template

<template id="myTemplate">
  htmlto append
</template>

然后你可以使用append

使用 jquery:

var template = $("#myTemplate").html();
$(characterSelect).append(template);

使用纯 JavaScript:

var template = document.getElementById("myTemplate").content;
characterSelect.appendChild(template);

这是一个 jsbin:https://jsbin.com/qucaxanohe/edit?html,js,output

【讨论】:

【参考方案2】:

一种方法是从头开始将您的 HTML 代码插入目标 div 中,但隐藏(使用 CSS 的 display:none 或 jQuery 的 hide())。

然后,在你的函数调用中,使用 jQuery 的 show() 随时显示隐藏的 HTML,如下所示:

$(document).ready(function() 
  $("#to_hide").hide();
);

//simulating some waiting before function call
//JUST FOR ILLUSTRATION PURPOSES, not needed in actual code
setTimeout(function() 
  callback();
, 3000);


//your function that will show the div and do whatever you want to do here
function callback() 
  //whatever you want to do here
  $(".to_hide").show();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <div class="to_hide">
    <p>Some content</p>
   </div>
</div>

【讨论】:

仅显示/隐藏元素似乎不必要地复杂。为什么不直接使用 toggle()。 完全一样。要么使用一个 show() 和一个 hide(),要么使用两个 toggle(),或者 CSS。 澄清一下,setTimeout 只是为了模拟在函数调用之前经过的一段时间,以便在这个 sn-p 中显示差异。实际代码中是不需要的。 非常感谢大家,这完全解决了我的问题! @user72503948573038 很高兴这有帮助!如果这回答了您的问题,请考虑将投票/标记为答案。祝你有美好的一天!

以上是关于使用javascript函数将复杂的HTML附加到div?的主要内容,如果未能解决你的问题,请参考以下文章

将 onDomContentLoaded 函数调用附加到 HTML 文件中的 DOM 对象

如何使用 javascript/jquery 将大型 html 块附加到刀片文件?

JavaScript 类 构造函数 用作附加到 HTML 文件的变量

雪花中的 Javascript 函数将表名附加到当前日期

如何将javascript函数中的参数字符串连接到附加html中的字符串上?

如何将两个html文件和两个JavaScript文件相互附加?