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