使用javascript修改dom时,我该如何做到这一点,在重新加载我的网页时不会删除这些

Posted

技术标签:

【中文标题】使用javascript修改dom时,我该如何做到这一点,在重新加载我的网页时不会删除这些【英文标题】:How can I do that when modifying the dom with javascript these are not deleted when reloading my web page [duplicate] 【发布时间】:2021-12-25 17:03:19 【问题描述】:

我有一个问题,如下所示:当我在重新加载网页时使用名为“guardarcambios.js”的文件修改 dom 时,我创建的元素被删除,我想知道我是怎么做的这不会发生。

这里分享一下我的htmljavascript的代码:

代码 html 'index.php':

<!doctype html>
<html lang="en">

<head>

  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <!-- Bootstrap CSS -->
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">

  <!-- InventoryBox-->
  <link rel="stylesheet" href="css/styles.css">

  <!-- Google Fonts: Roboto-->
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300&display=swap" rel="stylesheet">

  <!-- ICON-->
  <link rel="shortcut icon" href="resources/img/icon.png" type="image/x-icon">

  <title>Inventory Box</title>
</head>

<body>

  <nav class="navbar navbar-light bg-light border">
    <div class="row">
      <div class="col">
        <div class="container-fluid">
          <a class="navbar-brand " href="#">
            <img src="resources/img/icon.png"    class="d-inline-block align-text-center">
            InventoryBox
          </a>
        </div>
      </div>
    </div>
    <div class="col">
      <div class="container-fluid">
        <form class="d-flex">
          <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
          <button class="btn btn-outline-success" type="submit">Search</button>
        </form>
      </div>
    </div>
  </nav>

  <!-- Menu CUD-->
  <div class="row border">
    <div class="col  mt-3 mb-3">
      <div class="col-12" style="width: fit-content; margin: auto;">
        <button data-bs-toggle="modal" href="#modalagregarproducto" role="button" style="width: 500px; height: auto;" class="btn ml-auto btn-primary" type="submit">Agregar nuevo
          producto</button>
      </div>
    </div>

    <!-- Vertically centered modal -->
    <div class="modal fade" id="modalagregarproducto" aria-hidden="true" aria-labelledby="modalagregarproducto" tabindex="-1">
      <div class="modal-dialog modal-dialog-centered">
        <div class="modal-content">
          <div class="modal-header">
            <h5 class="modal-title" id="ModalToggleLabel">Agregar nuevo producto</h5>
            <button type="button" id="btn-close" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
          </div>
          <div class="modal-body">
            <form class="" action="" method="post" enctype="multipart/form-data">
              <input type="file" class="form-control" id="file" name="file" size="20" required>
              <hr>
              <div id="preview">

              </div>
              <div class="row mb-3 mt-3">
                <div class="col-5">
                  <label class="mt-2" for="id">ID: </label>
                </div>
                <div class="col-7 ">
                  <input class="form-control" type="number" name="id" id="id" placeholder="ID" required>
                </div>
              </div>
              <div class="row mb-3">
                <div class="col-5">
                  <label class="mt-2" for="nombre">Nombre del producto: </label>
                </div>
                <div class="col-7">
                  <input class="form-control" type="text" name="nombreProducto" id="nombreProducto" placeholder="Nombre del producto" required>
                </div>
              </div>
              <div class="row mb-3">
                <div class="col-5">
                  <label class="mt-2" for="modeloProducto">Modelo: </label>
                </div>
                <div class="col-7">
                  <input class="form-control" type="text" name="modeloProducto" id="modeloProducto" placeholder="Modelo del producto" required>
                </div>
              </div>
              <div class="row mb-3">
                <div class="col-5">
                  <label class="mt-2" for="numeroProducto">Número: </label>
                </div>
                <div class="col-7 ">
                  <input class="form-control" type="number" name="numeroProducto" id="numeroProducto" placeholder="Número de productos" required>
                </div>
              </div>
              <div class="col d-grid gap-2">
                <input type="submit" id="guardarcambios" name="guardarcambios" class="btn btn-primary" data-bs-target="#ModalToggle2" value="Guardar cambios">
              </div>
            </form>
          </div>
          <div class="modal-footer">
          </div>
        </div>
      </div>
    </div>

    <!-- Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>

    <!-- JavaScript -->
    <script src="js/vistaprevia.js"></script>
    <script src="js/descartar.js"></script>
    <script src="js/guardarcambios.js"></script>
</body>

</html>

代码 javascript 'guardarcambios.js':

window.onload = function () 
    const btnGuardarCambios = document.getElementById('guardarcambios')

    btnGuardarCambios.addEventListener("click", function () 

        // 1: Obtener los valores de los inputs por medio de los id.

        const imagen = document.getElementById("file").value // C:\fakepath\0-6277_firewatch-wallpaper-8k-hd-wallpaper-download-high-resolution.jpg
        console.log(imagen)

        const nombreProducto = document.getElementById("nombreProducto").value // Manilla
        const modeloProducto = document.getElementById("modeloProducto").value // 0x00 
        const numeroProducto = document.getElementById("numeroProducto").value // 25

        // 2: Crear cada uno de los elementos que conforman a una card en javascript.

        const createDiv = document.createElement("div") // <div></div>
        const createImg = document.createElement("img") // <img></img>
        const createDivBody = document.createElement("div") // <div></div>
        const createH5 = document.createElement("h5") // <h5></h5>
        const createP = document.createElement("p") // <p></p>
        const createButton1 = document.createElement("button") // <button></button>
        const createButton2 = document.createElement("button") // <button></button>

        // 3: Insertar los valores de los inputs en sus respectivos elementos creados.

        createImg.setAttribute("src", imagen) // <img src="C:\fakepath\0-6277_firewatch-wallpaper-8k-hd-wallpaper-download-high-resolution.jpg"></img>
        createImg.setAttribute("style", "width: 100px; heigt: 50px")
        createImg.setAttribute("class", "img-thumbnail")

        createH5.innerText = nombreProducto // <h5>Manilla</h5>
        createP.innerText = `Modelo producto: $modeloProducto Número de productos: $numeroProducto` // <p>Modelo producto: 0x00 Número de productos: 25</p>
        createButton1.innerText = "Modificar" // <button>Modificar</button>
        createButton2.innerText = "Eliminar" // <button>Eliminar</button>

        // 4: Estructurar el elemento

        createDiv.appendChild(createImg)
        createDiv.appendChild(createDivBody)
        createDivBody.appendChild(createH5)
        createDivBody.appendChild(createP)
        createDivBody.appendChild(createButton1)
        createDivBody.appendChild(createButton2)

        // 5: Mostrar en el window del navegador el elemento estructurado.

        document.body.appendChild(createDiv)
    )

我不需要编写代码,我只需要告诉我如何确保我使用 javascript 修改的内容不会被删除。非常感谢。

【问题讨论】:

如果您在 DOM 中进行更改,它们仅存在于浏览器中。如果您不对服务器上的源代码进行相应的更改,刷新页面时它们将丢失,除非您再次使用 JavaScript 进行相同的更改。 【参考方案1】:

您没有在 html 文件中的任何位置调用“guardarcambios.js”。

另外,不确定它是否是由于复制和粘贴造成的,可能不是大问题,但在您的

【参考方案2】:

我不确定这是否是原因,但我没有您所有的 JS 文件需要确认。在我的本地机器上运行时,它显示下图中的错误。

[

【讨论】:

你不和谐,要分享所有文件,不多,或者我可以用.ngrok链接分享 @AdalbertoGranjaValencia 问题不在于缺少文件,我截图的这个文件是我本地电脑上的一个。在此处查看您帖子的顶部,您将看到一个指向另一个主题的链接,该主题将在此处进一步讨论,您将在那里找到您的答案以及您遇到问题的原因:)

以上是关于使用javascript修改dom时,我该如何做到这一点,在重新加载我的网页时不会删除这些的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 HTML 或 JavaScript 下载当前的 DOM?

如何管理 DOM 元素

Javascript 不适用于 ujs 新生成的 DOM 元素

如何使用 JavaScript 获取 DOM 元素的 ::before 内容?

JavaScript基础之DOM修改样式

【求助】Dom4j 生成xml,节点增加属性时,属性值中有特殊字符,如何做到不转义