javascript - 无法使用 $.after() 关闭 div 标签

标签 javascript jquery twitter-bootstrap

这个问题最好用例子来说明:

http://jsbin.com/lavonexuse

所需的效果是单击“插入行”以在指示的列(由类 .insertion-point 指示)之后插入一个全 Angular 行。我遇到的问题是,它不是先关闭当前行,然后开始一个新行,而是在主行中嵌入一个新行。

如何在任何给定列之后关闭当前行,创建新行,关闭该行,然后继续显示“数据”列?

HTML:

<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery.min.js"></script>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
<script src="//code.jquery.com/jquery-2.1.1.min.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <div class="container">
    <div class="row">
      <div class="col-sm-4 item">
        Data
      </div>
      <div class="col-sm-4 item insertion-point">
        Data
      </div>
      <div class="col-sm-4 item">
        Data
      </div>
      <div class="col-sm-4 item">
        Data
      </div>
      <div class="col-sm-4 item">
        Data
      </div>
      <div class="col-sm-4 item">
        Data
      </div>
    </div>
  </div>
  <button class="btn btn-primary insert-row">Insert Row</button>
</body>
</html>

CSS:

.item {
  border: 1px solid #f00;
}

.pane {
  background: #999;
  height: 100px;
}

JavaScript:

$('.insert-row').on('click', function() {
  code = '</div><!--end row--><div class="row"><div class="col-sm-12 pane"></div></div>';

  $('.insertion-point').after(code);
});

编辑:

上面的代码字符串可能应该以 <div class="row"> 结尾重新打开该行。但我试过了,还是不行。

这里的问题是,视觉上我的解决方案似乎有效。尽管实际上,它正在创建糟糕的 HTML。

进一步解释(我觉得这个很难解释)。这是正在发生的事情,这不是我想要的:

enter image description here

我需要插入的行与其被错误插入的行处于同一级别。

jQuery 操作后所需的 HTML

  <div class="container">
    <div class="row">
      <div class="col-sm-4 item">
        Data
      </div>
      <div class="col-sm-4 item insertion-point">
        Data
      </div>
    </div>
    <div class="row">
      <div class="col-sm-12 pane"></div>
    </div>
    <div class="row">
      <div class="col-sm-4 item">
        Data
      </div>
      <div class="col-sm-4 item">
        Data
      </div>
      <div class="col-sm-4 item">
        Data
      </div>
      <div class="col-sm-4 item">
        Data
      </div>
    </div>
  </div>

进一步的漫谈

也许,因为这是 Bootstrap,我可以通过某种方式使用网格系统来达到相同的效果。

最佳答案

下面的代码应该可以解决您的问题。查看代码片段和演示:

$('.insert-row').on('click', function() {
  var row = $('<div/>',{class:"row"}),
      code = '<!--end row--><div class="row"><div class="col-sm-12 pane">New</div></div>',
      rest = $('.insertion-point').nextAll(),
      dest = $('.insertion-point').closest('.row');
  dest.after( row.append( rest ) ).after( code );
});
<script src="//code.jquery.com/jquery.min.js"></script>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
<script src="//code.jquery.com/jquery-2.1.1.min.js"></script>

<div class="container">
    <div class="row">
      <div class="col-sm-4 item">
        Data
      </div>
      <div class="col-sm-4 item insertion-point">
        Data
      </div>
      <div class="col-sm-4 item">
        Data
      </div>
      <div class="col-sm-4 item">
        Data
      </div>
      <div class="col-sm-4 item">
        Data
      </div>
      <div class="col-sm-4 item">
        Data
      </div>
    </div>
  </div>
  <button class="btn btn-primary insert-row">Insert Row</button>

关于javascript - 无法使用 $.after() 关闭 div 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26723258/

相关文章:

javascript - Html2pf/html2canvas/jsPDF 使用 Bootstrap 模式不显示边框

javascript - bootstrap.js 工具提示插件中使用的奇怪语法以及计算工具提示位置

javascript - MongoDB 有本地 REST 接口(interface)吗?

javascript - jQuery:if语句来选择一个选项值

javascript - HTML Range输入增/减值问题

javascript - JQuery - 追加从 $ ('select' ) 到 $ ('input' ) 对象

css - 为什么我的表格列没有左对齐?

javascript - KnockoutJS 中的嵌套可观察对象

javascript - 单击输入元素时如何获取表单子(monad)级的文本

javascript - 从数组中删除重复项