2014-10-02 58 views
-1

我想寫一個JavaScript函數來測試,如果一個元素是第一個孩子......如何測試如果給定的元素是第一個孩子

這是我的代碼:

$el = document.getElementsByClassName("b")[0]; 
$firstEl = $el.parentNode.getElementsByClassName("a").firstChild; 

http://jsfiddle.net/bf2ae5tt/

爲什麼它不起作用?

+0

#text節點,因爲你正在處理一個節點列表,而不是一個單一的元素。我想你想循環。 – elclanrs 2014-10-02 07:29:06

+0

不應該「firstChild得到名單的第一個孩子嗎?」 – 2014-10-02 07:30:00

+0

「第一個孩子」是什麼意思?*什麼*的第一個孩子? – 2014-10-02 07:32:14

回答

1

只需使用$firstEl = $el.parentNode.getElementsByClassName("a")[0]代替firstChild

0

如果我理解你,你要檢查的第一a,看看它是第一b的第一個孩子,那麼你就需要另一個[0]

$el = document.getElementsByClassName("b")[0]; 
$firstEl = $el.parentNode.getElementsByClassName("a")[0].firstChild; 
// Here ---------------------------------------------^^^ 
if ($el === $firstEl) { 
    // .... 
} 

但我會用querySelector代替,它具有更好的支持(基本上,它在IE8,而getElementsByClassName不是)它返回它發現而不是尋找他們全部並返回一個列表中的第一個元素:

$el = document.querySelector(".b"); 
$firstEl = $el.parentNode.querySelector(".a").firstChild; 
if ($el === $firstEl) { 
    // .... 
} 
0

你能做到這樣

$el = document.getElementsByClassName("b")[0]; 

    if($el.parentNode.children.length > 0){ 
     $firstEl = $el.parentNode.children[0]; 
    } 

    console.log($el == $firstEl); 

使用firstChild

$el = document.getElementsByClassName("b")[0]; 

    $firstEl = $el.parentNode.firstChild; 

    console.log($el == $firstEl); 

會工作,如果你的dom是

<div class="p"><div class="a b"></div><div class="a"></div></div> 

不是當你的DOM是

<div class="p"> 
    <div class="a b"></div> 
    <div class="a"></div> 
    </div> 

因爲在標籤之間的任何空白將導致插入

node.firstChild

相關問題