Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算ul的直接子级,不包括脚本标记_Javascript_Jquery - Fatal编程技术网

Javascript 计算ul的直接子级,不包括脚本标记

Javascript 计算ul的直接子级,不包括脚本标记,javascript,jquery,Javascript,Jquery,下面是我的HTML结构,其中包括脚本标记 <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&g

下面是我的HTML结构,其中包括脚本标记

<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>

因为脚本标记是列表的子元素。

只需将脚本标记移出
。它将使您的代码更有效、更合理,并使其满足您的需要


我承认,如果您坚持在
中留下
标记,那么@Pekka的评论将解决您的问题。

如果您有兴趣阅读
  • 子元素的计数,这些子元素是由id列表中的元素生成的,我想这是您可以做到的香草javascript

    var liElements = document.getElementById('list').getElementsByTagName("li"); 
    alert(liElements.length);
    
    不过,我也强烈建议您(正如许多其他人已经建议您的那样)研究如何使用DOM操作,而不是简单的旧javascript

    var liElements = document.getElementById('list').getElementsByTagName("li"); 
    alert(liElements.length);
    
    如果您希望所有子元素都不包含任何
    标记元素,这可能会很方便(它不会过滤
    标记,但它会过滤掉带有特定
    类型
    属性
    text/javascript
    的标记,该属性仅由
    标记使用)


    让我知道这是否有帮助…

    $('ul')。查找('li')。长度
    ?为什么那里甚至有
    脚本
    标记?这将意味着您的HTML无效。@Pekka感谢您的回复。我需要一个自定义选择器,可以计算容器中任何类型的直接子级。为此,我尝试使用document.queryselectoral(“#list>*”),但它正在计算该脚本tag@Rory是的,它是无效的html,但由于html中的某些原因,我需要使用它。实际上,我已经用javascript开发了一个实用程序,在这里我不能使用jquery。我的团队的开发人员在不同的地方使用我的实用程序,所以我不能使用像Ul>Li这样的特定选择器。我添加上面的代码只是为了说明我在哪里遇到了问题,因为我不能将原始代码放在这里。我有点困惑,在这种情况下,你到底在寻找什么?一种能够选择一个元素的所有直接子元素的方法,不管它们的类型是什么,标记元素除外?是的,我希望这里有相同的子元素。我不想让那个脚本标签被计数。非常感谢你的帮助。它解决了我的问题。@Hems意识到这一方面,因此也意识到这个问题;这个答案对他的实际问题没有帮助。
    var nodes = document.querySelectorAll('#list > *:not([type="text/javascript"])');
    alert(nodes.length);