我正在编写一个脚本,用于选择从节元素下降的所有段落元素。我希望它排除具有标题标签的previousElementSibling的所有段落元素。根据previousElementSibling排除元素
脚本的工作部分,用我的测试console.logs是
var allParagraphs = document.querySelectorAll('section > p');
var firstParagraph = allParagraphs[0];
for (i=0; i < allParagraphs.length; i++) {
var prevElement = allParagraphs[i].previousElementSibling;
console.log(prevElement);
if (i !=0 && i != allParagraphs.length && i % 3 == 0) {
// Work Magic on the Paragraph Elements
}
}
我想,虽然做的是排除由标题元素之前,特别是任何段落元素。
当我运行上面的脚本时,我的console.log输出将正确列出一切。我不知道如何实际测试“”/“h3”/ etc的值。
我尝试使用其他一些属性,如.localName和.nodeName。在prevElement为空控制台
console.log(prevElement.localName);
console.log(prevElement.nodeName);
这两种结果的一个错误:当我添加那些的console.log。
我也尝试添加:
&& prevElement != '<h3'>
到如果情况,看看是否奏效,以及“H3” /“H3”和他们都不一样。
有没有办法将h3 + p从最初的document.querySelectorAll中排除或在if/then条件中过滤出来?
注意:我不想在jQuery中这样做。
你是如何到达那个长选择器?为什么'section> p:not(h3 + p)'不起作用? – Cedon
@belinus:[':not'只允许简单的选择器](https://drafts.csswg.org/selectors-3/#negation) - 我喜欢用':not(h1,h2,h3,... )'但它不起作用。选择器4草案放松了一下,但我认为它还没有实现。所以我只是把你的描述和字面翻译为选择器... – Bergi
这是CSS vs JS的乐趣:P。 P:是第一个孩子需要还是可以选择第二部分? p是部分的第一个孩子。 – Cedon