我想寫一個JavaScript函數來測試,如果一個元素是第一個孩子......如何測試如果給定的元素是第一個孩子
這是我的代碼:
$el = document.getElementsByClassName("b")[0];
$firstEl = $el.parentNode.getElementsByClassName("a").firstChild;
爲什麼它不起作用?
我想寫一個JavaScript函數來測試,如果一個元素是第一個孩子......如何測試如果給定的元素是第一個孩子
這是我的代碼:
$el = document.getElementsByClassName("b")[0];
$firstEl = $el.parentNode.getElementsByClassName("a").firstChild;
爲什麼它不起作用?
只需使用$firstEl = $el.parentNode.getElementsByClassName("a")[0]
代替firstChild
如果我理解你,你要檢查的第一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) {
// ....
}
你能做到這樣
$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>
因爲在標籤之間的任何空白將導致插入
#text
節點,因爲你正在處理一個節點列表,而不是一個單一的元素。我想你想循環。 – elclanrs 2014-10-02 07:29:06不應該「firstChild得到名單的第一個孩子嗎?」 – 2014-10-02 07:30:00
「第一個孩子」是什麼意思?*什麼*的第一個孩子? – 2014-10-02 07:32:14