jQuery replace替换表行时的奇怪行为

时间:2013-02-04 19:49:10

标签: javascript jquery html

我遇到过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()不允许你执行上述操作,即使浏览器会正确呈现它?

1 个答案:

答案 0 :(得分: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里面时就开始工作了。< / p>