2016-03-23 77 views
0

我正在編寫一個腳本,用於選擇從節元素下降的所有段落元素。我希望它排除具有標題標籤的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中這樣做。

回答

2

有沒有辦法將h3 + p從最初的document.querySelectorAll中排除?

你可以使用選擇

section > p:first-child, section > *:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) + p 

...或將其過濾掉,如果/ then條件?

您與prevElement.nodeName != "h3"做法很好,但是你需要採取在他們的部分的第一個元素,並沒有一個.previousElementSibling段落的照顧。只需測試prevElement == null || …

+0

你是如何到達那個長選擇器?爲什麼'section> p:not(h3 + p)'不起作用? – Cedon

+0

@belinus:[':not'只允許簡單的選擇器](https://drafts.c​​sswg.org/selectors-3/#negation) - 我喜歡用':not(h1,h2,h3,... )'但它不起作用。選擇器4草案放鬆了一下,但我認爲它還沒有實現。所以我只是把你的描述和字面翻譯爲選擇器... – Bergi

+0

這是CSS vs JS的樂趣:P。 P:是第一個孩子需要還是可以選擇第二部分? p是部分的第一個孩子。 – Cedon