我有以下HTML和jQuery代码:
<div id="outer">
<p>
<p>paragraph inside division.</p>
<h2>a heading</h2>
<ul>
<li>first item</li>
<li>second item</li>
</ul>
</p>
</div>
jQuery:
$(function() {
$divChildren = $('div#outer').children();
$divChildren.each(function(){
$(this).css('background-color', 'red');
});
alert($divChildren.length);
});
从我看到的,没有。 <div id="outer">
的直系儿童应该是1,但jQuery看到4.为什么?
但是,如果'#outer'内部的每一个都包含在另一个div中(而不是&lt; p&gt;),那么它只能看到一个直接子节点(如预期的那样)。
编辑:这绝对是一个格式错误的HTML嵌套问题(并感谢大家的回答)。但是,我的问题应该更恰当地说:jQuery是否了解并强制执行HTML嵌套规则,还是浏览器构建DOM树(强加嵌套规则),jQuery只返回在DOM树中看到的内容?
答案 0 :(得分:7)
不幸的是,<p>
元素不能包含其他<p>
元素。这就是HTML的工作原理。您需要使用<div>
代替。
答案 1 :(得分:5)
您的HTML代码无效。您无法将p
标记放在p
标记
段落元素可以包含在元素“address”,“applet”,“blockquote”,“body”,“button”,“center”,“del”,“dd”,“div”,“fieldset”中“,”form“,”iframe“,”ins“,”li“,”map“,”noframes“,”noscript“,”object“,”td“和”th“。
HTML内联元素是可能包含在段落元素中的唯一元素。