首页 > 解决方案 > 如何正确复制内部 HTML?

问题描述

我对 jQuery 比较陌生。我这里有问题。

这是我的 js 文件:

$(document).ready(function () {
  $('[data-toggle="tooltip"]').tooltip();
  var actions = $("table td:last-child").html();
  var accounts = $("table td:first-child").html(); //see this line

  // Append table with add row form on add new button click
  $(".add-new").click(function () {
    $(this).attr("disabled", "disabled");
    var index = $("table tbody tr:last-child").index();
    var row =
      "<tr>" +
      "<td>" +
      accounts +
      "</td>" +
      '<td><input type="text" class="form-control" name="debit" id="debit"></td>' +
      '<td><input type="text" class="form-control" name="credit" id="credit"></td>' +
      '<td><input type="text" class="form-control" name="description" id="description"></td>' +
      "<td>" +
      actions +
      "</td>" +
      "</tr>";
    $("table").append(row);
    $("table tbody tr")
      .eq(index + 1)
      .find(".add, .edit")
      .toggle();
    $('[data-toggle="tooltip"]').tooltip();
  });

  // Add row on add button click
  $(document).on("click", ".add", function () {
    var empty = false;
    var input = $(this).parents("tr").find('input[type="text"]:not(:first)');
    input.each(function () {
      if (!$(this).val()) {
        $(this).addClass("error");
        empty = true;
      } else {
        $(this).removeClass("error");
      }
    });
    $(this).parents("tr").find(".error").first().focus();
    if (!empty) {
      input.each(function () {
        $(this).parent("td").html($(this).val());
      });
      $(this).parents("tr").find(".add, .edit").toggle();
      $(".add-new").removeAttr("disabled");
    }
  });
});

这是 HTML 文件:

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

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

    <link rel="shortcut icon" href="/dashboardAssets/img/favicon.png" />

    <title>Create Transaction</title>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.1/css/bootstrap-select.css" />
    <!-- bootstrap theme -->
    <link href="/dashboardAssets/css/bootstrap-theme.css" rel="stylesheet" />
    <!-- font icon -->
    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
    <link href="/dashboardAssets/css/elegant-icons-style.css" rel="stylesheet" />
    <link href="/dashboardAssets/css/font-awesome.min.css" rel="stylesheet" />

    <th:block th:include="fragments :: dataTableCSS"></th:block>
    <!-- Custom styles -->
    <link href="/dashboardAssets/css/style.css" rel="stylesheet" />
    <link href="/dashboardAssets/css/transaction-style.css" rel="stylesheet" />
    <link href="/dashboardAssets/css/jquery-ui-1.10.4.min.css" rel="stylesheet" />
    <link rel="stylesheet"
        href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/css/bootstrap-datepicker.css"
        integrity="sha512-Fppbdpv9QhevzDE+UHmdxL4HoW8HantO+rC8oQB2hCofV+dWV2hePnP5SgiWR1Y1vbJeYONZfzQc5iII6sID2Q=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>

<body>
    <!-- container section start -->
    <section id="container" class="">
        <!-- header start -->
        <th:block th:include="fragments :: header"></th:block>
        <!--header end-->

        <!--sidebar start-->
        <th:block th:include="fragments :: sidebar"></th:block>
        <!--sidebar end-->

        <!--main content start-->
        <section id="main-content">
            <section class="wrapper">
                <div class="row">
                    <div class="col-lg-12">
                        <h3 class="page-header"><i class="fa fa fa-bars"></i> Transaction</h3>
                        <ol class="breadcrumb">
                            <li><i class="fa fa-home"></i><a href="/dashboard">Home</a></li>
                            <li><i class="fa fa-bars"></i>Transaction</li>
                            <li><i class="fa fa-square-o"></i>Create Transaction</li>
                        </ol>
                    </div>
                </div>
                <!-- page start-->
                <div class="row">
                    <div class="container">
                        <div class="table-wrapper">
                            <div class="table-title">
                                <div class="row">
                                    <div class="col-sm-8">
                                        <h2>Create <b>Transaction</b></h2>
                                    </div>
                                    <div class="col-sm-4">
                                        <button type="button" class="btn btn-info add-new"><i class="fa fa-plus"></i>
                                            Add New</button>
                                    </div>
                                </div>
                            </div>
                            <table class="table table-bordered" aria-label="dataTable">
                                <thead>
                                    <tr>
                                        <th>Account</th>
                                        <th>Debit</th>
                                        <th>Credit</th>
                                        <th>Description</th>
                                        <th>Actions</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <tr>
                                        <td>
                                            <div class="row-fluid"> <!-- i want to duplicate this -->
                                                <select class="selectpicker" data-live-search="true">
                                                    <optgroup label="Customers">
                                                        <option th:text="${customer}" th:each="customer : ${customerAccounts}"></option>
                                                    </optgroup>
                                                    <optgroup label="Vendors">
                                                        <option th:text="${vendor}" th:each="vendor : ${vendorAccounts}"></option>
                                                    </optgroup>
                                                    <optgroup label="Assets">
                                                        <option th:text="${asset}" th:each="asset : ${assetAccounts}"></option>
                                                    </optgroup>
                                                    <optgroup label="Liabilities">
                                                        <option th:text="${liability}" th:each="liability : ${liabilityAccounts}"></option>
                                                    </optgroup>
                                                    <optgroup label="Expenses">
                                                        <option th:text="${expense}" th:each="expense : ${expenseAccounts}"></option>
                                                    </optgroup>
                                                    <optgroup label="Partner">
                                                        <option th:text="${partner}" th:each="partner : ${partnerAccounts}"></option>
                                                    </optgroup>
                                                </select>
                                            </div>
                                        </td>
                                        <td></td>
                                        <td></td>
                                        <td></td>
                                        <td>
                                            <a class="add" title="Add" data-toggle="tooltip"><i
                                                    class="material-icons">&lt;/i></a>
                                            <a class="edit" title="Edit" data-toggle="tooltip"><i
                                                    class="material-icons">&lt;/i></a>
                                            <a class="delete" title="Delete" data-toggle="tooltip"><i
                                                    class="material-icons">&lt;/i></a>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>

                <div class="row">
                    <div class="container">
                        <div class="panel panel-body">
                            <form action="/commitTransaction">
                                <button class="btn btn-primary" style="float:right" type="submit">Commit</button>
                            </form>
                        </div>
                    </div>
                </div>
                <!-- page end-->
            </section>
            <th:block th:include="fragments :: footer"></th:block>
        </section>
    </section>
    <!--main content end-->

    <!-- javascripts -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.1/js/bootstrap-select.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <!-- nice scroll -->
    <script src="/dashboardAssets/js/jquery.scrollTo.min.js"></script>
    <script src="/dashboardAssets/js/jquery.nicescroll.js" type="text/javascript"></script>
    <!-- bootstrap-select -->
    <!--custome script for all page-->
    <script src="/dashboardAssets/js/scripts.js"></script>
    <script src="/dashboardAssets/js/transaction.js"></script>
    <!-- Bootstrap Date-Picker Plugin -->
    <script src="/dashboardAssets/js/bootstrap-datepicker.js"></script>
</body>

</html>

我在 macOS 上使用 Safari 浏览器。而且,当我运行此页面(在项目中)时,它显示的 HTML 如下:

<td>
    <div class="row-fluid">
        <div class="btn-group bootstrap-select"><button type="button" class="btn dropdown-toggle btn-default"
                data-toggle="dropdown" role="button" title="cash in hand" aria-expanded="false"><span
                    class="filter-option pull-left">cash in hand</span>&nbsp;<span class="bs-caret"><span
                        class="caret"></span></span></button>
            <div class="dropdown-menu open" role="combobox"
                style="max-height: 204px; overflow: hidden; min-height: 106px;">
                <div class="bs-searchbox"><input type="text" class="form-control" autocomplete="off" role="textbox"
                        aria-label="Search"></div>
                <ul class="dropdown-menu inner" role="listbox" aria-expanded="false"
                    style="max-height: 159px; overflow-y: auto; min-height: 61px;">
                    <li class="dropdown-header " data-optgroup="1"><span class="text">Customers</span></li>
                    <li data-original-index="0" data-optgroup="1" class="active"><a tabindex="0" class="opt  "
                            data-tokens="null" role="option" aria-disabled="false" aria-selected="false"><span
                                class="text">cx</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
                    <li data-original-index="1" data-optgroup="1"><a tabindex="0" class="opt  " data-tokens="null"
                            role="option" aria-disabled="false" aria-selected="false"><span class="text">cz</span><span
                                class="glyphicon glyphicon-ok check-mark"></span></a></li>
                    <li data-original-index="2" data-optgroup="1"><a tabindex="0" class="opt  " data-tokens="null"
                            role="option" aria-disabled="false" aria-selected="false"><span class="text">cy</span><span
                                class="glyphicon glyphicon-ok check-mark"></span></a></li>
                    <li class="divider" data-optgroup="2div"></li>
                    <li class="dropdown-header " data-optgroup="2"><span class="text">Vendors</span></li>
                    <li data-original-index="3" data-optgroup="2"><a tabindex="0" class="opt  " data-tokens="null"
                            role="option" aria-disabled="false" aria-selected="false"><span class="text">vx</span><span
                                class="glyphicon glyphicon-ok check-mark"></span></a></li>
                    <li data-original-index="4" data-optgroup="2"><a tabindex="0" class="opt  " data-tokens="null"
                            role="option" aria-disabled="false" aria-selected="false"><span class="text">vy</span><span
                                class="glyphicon glyphicon-ok check-mark"></span></a></li>
                    <li class="divider" data-optgroup="3div"></li>
                    <li class="dropdown-header " data-optgroup="3"><span class="text">Assets</span></li>
                    <li data-original-index="5" data-optgroup="3"><a tabindex="0" class="opt  " data-tokens="null"
                            role="option" aria-disabled="false" aria-selected="false"><span class="text">cash in
                                bank</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
                    <li data-original-index="6" data-optgroup="3" class="selected"><a tabindex="0" class="opt  "
                            data-tokens="null" role="option" aria-disabled="false" aria-selected="true"><span
                                class="text">cash in hand</span><span
                                class="glyphicon glyphicon-ok check-mark"></span></a></li>
                    <li data-original-index="7" data-optgroup="3"><a tabindex="0" class="opt  " data-tokens="null"
                            role="option" aria-disabled="false" aria-selected="false"><span
                                class="text">furniture</span><span class="glyphicon glyphicon-ok check-mark"></span></a>
                    </li>
                    <li class="divider" data-optgroup="4div"></li>
                    <li class="dropdown-header " data-optgroup="4"><span class="text">Liabilities</span></li>
                    <li data-original-index="8" data-optgroup="4"><a tabindex="0" class="opt  " data-tokens="null"
                            role="option" aria-disabled="false" aria-selected="false"><span class="text">consultant
                                ali</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
                    <li class="divider" data-optgroup="5div"></li>
                    <li class="dropdown-header " data-optgroup="5"><span class="text">Expenses</span></li>
                    <li data-original-index="9" data-optgroup="5"><a tabindex="0" class="opt  " data-tokens="null"
                            role="option" aria-disabled="false" aria-selected="false"><span class="text">business name
                                registeration</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
                    <li data-original-index="10" data-optgroup="5"><a tabindex="0" class="opt  " data-tokens="null"
                            role="option" aria-disabled="false" aria-selected="false"><span class="text">water
                                filled</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
                    <li class="divider" data-optgroup="6div"></li>
                    <li class="dropdown-header " data-optgroup="6"><span class="text">Partner</span></li>
                    <li data-original-index="11" data-optgroup="6"><a tabindex="0" class="opt  " data-tokens="null"
                            role="option" aria-disabled="false" aria-selected="false"><span class="text">aa</span><span
                                class="glyphicon glyphicon-ok check-mark"></span></a></li>
                    <li data-original-index="12" data-optgroup="6"><a tabindex="0" class="opt  " data-tokens="null"
                            role="option" aria-disabled="false" aria-selected="false"><span class="text">aa2</span><span
                                class="glyphicon glyphicon-ok check-mark"></span></a></li>
                </ul>
            </div><select class="selectpicker" data-live-search="true" tabindex="-98">
                <optgroup label="Customers">
                    <option>cx</option>
                    <option>cz</option>
                    <option>cy</option>
                </optgroup>
                <optgroup label="Vendors">
                    <option>vx</option>
                    <option>vy</option>
                </optgroup>
                <optgroup label="Assets">
                    <option>cash in bank</option>
                    <option>cash in hand</option>
                    <option>furniture</option>
                </optgroup>
                <optgroup label="Liabilities">
                    <option>consultant ali</option>
                </optgroup>
                <optgroup label="Expenses">
                    <option>business name registeration</option>
                    <option>water filled</option>
                </optgroup>
                <optgroup label="Partner">
                    <option>aa</option>
                    <option>aa2</option>
                </optgroup>
            </select>
        </div>
    </div>
</td>

我真的不明白这个额外的 HTML 是从哪里来的,因为我的var accounts = $("table td:first-child").html();js 文件中的行无法复制并再次使用它。供参考,提供图像。请指导我。 在此处输入图像描述

在“帐户”列的第二行中,我想要第一行中存在的相同下拉列表。场景是,每当用户将在一行中添加详细信息(帐户、借方、贷方、描述)时,他将“添加”该行,然后单击“添加新”按钮以创建一个新行。这是我希望复制第一行中显示的所有相同帐户的地方。

任何帮助将不胜感激。

标签: javascripthtmljquerytwitter-bootstrap

解决方案


推荐阅读