2012-11-10 19 views
3

当我有P标记或SPAN标记包围的元素时,为什么jQuery无法找到next(),即使元素确实有直接的兄弟?为什么jQuery在被某些标签包围时找不到next()?

<p> 
<img src="" width="40" height="40" 
    onmouseover="alert('next() is ' + $(this).next().length)" /> 
    &lt;-- mouseover me 
<div></div> 
</p>​ 

如果我将P标记更改为SPAN标记,则会出现同样的问题。如果我删除P标签或将其更改为几乎任何其他标签,它都可以正常工作。

的jsfiddle:http://jsfiddle.net/YHTGT/

+0

备注:我正在使用jQuery 1.7.1 –

+0

您应该为问题的好处定义“失败”。 –

+2

因为'p'元素不能包含'div'元素。查看生成的DOM结构。浏览器在'p'之后移动'div'。 –

回答

5

div不是p节点内的有效节点,所以解析器大概eliding它完全。如果它有内容,我希望它在DOM树中移动到节点p,使其不是兄弟的img

div更改为spanworks,因为span被允许在那里。

+0

有趣。可能就是这样。所以这不是jQuery的错;浏览器正在重新排列标签,因为DIV不允许放在P. –

+1

@DougS:是的;它既不是jQuery的错,也不是浏览器的,而是你的。 :) –

相关问题