当我调用org.openqa.selenium.NoSuchFrameException: No frame element found by name or id Login
并且我想获取它的firstChild节点时,它返回querySelectorAll('#fchildP')
,其数据属性为#text node
resp \n
,而nextSibling为"breakline"
元素是p
的孩子。代码可能有助于理解:
#fchild
JS:
<div id="wrap">
<p id="fchildP">
<p>This is first child of #fchildP</p>
<span id="fchildPchild"></span>
</p>
</div>
所以我致电var child = $('#fchildP').child(':first-child'); // returns text endline deliminer
var next = $('#fchildP').next(); // returns p
=&gt;返回:带有结束分隔符作为数据的文本以及当我调用querySelectorAll('#fchildP').firstChild
=&gt;时返回: querySelectorAll('#fchildP').nextSibling
“这是#fchildP的第一个孩子”作为数据,它是p node
的子元素。为什么会这样?我怎么能得到#fchildP
但是元素,而不是firstChild
?
PS:这不是jQuery,它是我自己的库
答案 0 :(得分:3)
三件事:
<p>
元素。嵌套的<p>
元素将在打开新元素之前关闭父元素。使用别的东西。例如<div id="fchildP">
... </div>
firstElementChild
代替firstChild
来获取元素而不是文本节点NodeList
... document.querySelectorAll(
返回的)
选择第一个元素 [0]
答案 1 :(得分:2)
段落元素无法嵌套。当HTML解析器看到开始<p>
标记时,它会隐式关闭先前打开的P
元素(自its closing tag is optional起)。因此,鉴于您的标记,第二个P
不是#fchildP
的孩子,而是它的兄弟(#fchildP
本身除了换行符之外没有任何内容。)