jQuery .append() 什么时候像 .insertBefore() 最后 child 与记录的一样?
When does jQuery .append() act like .insertBefore() last child vs. as documented?
http://jsfiddle.net/foaje732/2/
HTML 来源:
<p id="words">Words
<p>
<label>Q1
<input type="text" id="q1" name="myinput" />
</label>
</p>
</p>
脚本:
$('#words').append($('<p></p>').html("This is clearly in the wrong place."));
你实际得到的是:
Words.
This is clearly in the wrong place.
Q1 [input field]
因为你的标记错误,p
元素不能包含其他块元素,它只能包含行内元素。因此,您的标记在浏览器中呈现的实际 html 将如下所示,这使您的输出正确。
<p id="words">Words</p>
<p>
<label>Q1
<input type="text" id="q1" name="myinput">
</label>
</p>
<p></p>
所以您可以寻找的一种可能的解决方案是使用 div
作为外部容器,例如
$('#words').append($('<p></p>').html("This is clearly in the wrong place."));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="words">Words
<div>
<label>Q1
<input type="text" id="q1" name="myinput" />
</label>
</div>
</div>
我们无法在 p
元素中获取任何子元素 <element>
,$('#words').children()
将 return 0 以便它 append
您的代码位于p
(词后-文本,不是任何元素)。
在这种情况下,如果您想修复它,请尝试将 p
更改为 div
:
<div id="words">
<p>Words</p>
<p>
<label>Q1
<input type="text" id="q1" name="myinput" />
</label>
</p>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
$(document).ready(function(){
$('#words').append($('<p></p>').html("This is clearly in the wrong place."));
})
http://jsfiddle.net/foaje732/2/ HTML 来源:
<p id="words">Words
<p>
<label>Q1
<input type="text" id="q1" name="myinput" />
</label>
</p>
</p>
脚本:
$('#words').append($('<p></p>').html("This is clearly in the wrong place."));
你实际得到的是:
Words. This is clearly in the wrong place. Q1 [input field]
因为你的标记错误,p
元素不能包含其他块元素,它只能包含行内元素。因此,您的标记在浏览器中呈现的实际 html 将如下所示,这使您的输出正确。
<p id="words">Words</p>
<p>
<label>Q1
<input type="text" id="q1" name="myinput">
</label>
</p>
<p></p>
所以您可以寻找的一种可能的解决方案是使用 div
作为外部容器,例如
$('#words').append($('<p></p>').html("This is clearly in the wrong place."));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="words">Words
<div>
<label>Q1
<input type="text" id="q1" name="myinput" />
</label>
</div>
</div>
我们无法在 p
元素中获取任何子元素 <element>
,$('#words').children()
将 return 0 以便它 append
您的代码位于p
(词后-文本,不是任何元素)。
在这种情况下,如果您想修复它,请尝试将 p
更改为 div
:
<div id="words">
<p>Words</p>
<p>
<label>Q1
<input type="text" id="q1" name="myinput" />
</label>
</p>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
$(document).ready(function(){
$('#words').append($('<p></p>').html("This is clearly in the wrong place."));
})