0

我在 jQuery 中遇到了一些奇怪的行为,我想知道我做错了什么。

我已经设法解决了这个问题,但是我用它把头发拉了好几天。

这是给你的 jsFiddle... http://jsfiddle.net/YZxzy/3/

问题似乎正在替换<tr><input ... /> <tr> .. <tr>. 但是,这将正确呈现。

需要明确的是,具有:

<table>
  <thead>
    <tr>
      <th>col 1</th>
      <th>col 2</th>
    </tr>
  </thead>
  <tbody>
    <input type="hidden" .... />
    <tr>
    ...
    </tr>
  </tbody>
</table>

将在浏览器中正确呈现,但我无法使用 jQuery“replaceWith”操作创建它。

现在,我知道这不是很好的做法,而且这是不好的做法,问题不在于我该如何解决它。我知道我可以通过将其添加<input>到中来修复它,而且我也知道它应该在 . 问题是:

为什么 jQuery.replaceWith()不允许您执行上述操作,即使浏览器会正确呈现它?

4

1 回答 1

1

实际上,这个脚本有一些问题。

这是我的叉子:http: //jsfiddle.net/mori57/b3wfY/

一方面,当它开始变大时,您将开始遇到麻烦,因为您破坏 DOM 只是为了重新添加已经存在的东西。没有充分的理由替换 AddNewRows 只是为了重新添加它。您应该使用 .before() 来插入新行。

$("#AddRows").click(function () {
    $("#AddNewRows").before(
        '<tr id="row3"><input type="hidden" value="33" id="hiddenRow3" /><td>Value 3.1</td><td>Value 3.2</td></tr>');
});

其次,只要我将你的隐藏字段移到行内,它就开始工作了。为什么?因为<input/>标签在您放置它们的位置无效...<table/>标签可以包含 tbody、thead、tr 和其他几个标签,但输入无效。这使渲染中断。但是,如果您将隐藏的输入字段放置在行内,那是有效的放置...实际上,我认为最好将其放置在 td 标记中,但是一旦我将其放入 tr 中,它就开始工作了。

于 2013-02-04T20:08:06.900 回答