querySelectorAll text endline deliminers& nextSibling

时间:2015-09-14 12:15:47

标签: javascript html

当我调用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,它是我自己的库

2 个答案:

答案 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本身除了换行符之外没有任何内容。)