2015-10-01 51 views
-3

以下是我的HTML結構,其中包括腳本標籤計數的UL直接子女,不包括腳本標籤

<ul id="list"> 
    <li class="item1"><a href="#">Item 1</a></li> 
    <li class="item2"><a href="#">Item 2</a></li> 
    <li class="item3"><a href="#">Item 3</a></li> 
    <script type='text/javascript' src="main.js"></script> 
    <li class="item4"><a href="#">Item 4</a></li> 
</ul> 

以下是我的JS代碼來獲得直接子的長度

var directChild = document.getElementById('list').children; 
console.log(directChild.length); // this gives me length as 5 
+6

'$('ul')。find('li')。length'? – guradio

+7

爲什麼在那裏還有'script'標籤?這將意味着你的HTML無效。 –

+0

http://jsfiddle.net/b8e4uqvx/ – guradio

回答

1

如果你有興趣閱讀<li>子元件,其的數量由元素生 ID爲名單我想這是儘可能接近你會得到這樣做瓦特/香草的JavaScript。 ..

var liElements = document.getElementById('list').getElementsByTagName("li"); 
alert(liElements.length); 

不過,我也強烈建議您(如許多人已經通知你)考慮使用jquery對DOM操作,而不是普通的舊的JavaScript ...

如果你希望所有c希爾德元素沒有任何<script>標籤元素,這可能派上用場(不過濾<script>標籤,但它獲得與特定type屬性text/javascript這是由<script>標籤只用來過濾掉標籤關閉;))

var nodes = document.querySelectorAll('#list > *:not([type="text/javascript"])'); 
alert(nodes.length); 

讓我知道這是否有幫助...

+0

其實我用JavaScript開發了一個實用程序,我不能使用jquery。我的團隊的開發人員正在各個地方使用我的實用程序,所以我不能使用像UI> Li這樣的特定選擇器。我添加上面的代碼只是爲了演示我面臨的問題,因爲我不能把這裏的原始代碼放在這裏 – Hems

+0

我有點困惑,在這種情況下你到底想找什麼?一種能夠選擇某個元素的所有直接子元素的方式,不管元素的類型爲

-1

因爲腳本標記是#list的子元素。

+0

@Hems意識到這方面並因此提出問題;這個答案對他的實際問題沒有幫助。 – Filip

1

只需將您的腳本標記移出<ul>即可。它會使你的代碼有效,更明智,並且會使你的代碼做到你想要的。

我承認,如果您堅持在<ul>處留下<script>標籤,那麼來自@Pekka的評論將解決您的問題。