标签:javascript css-selectors dom
我能够做到这一点:
<div id="myDiv">
<div class="foo"></div>
</div>
myDiv = getElementById("myDiv");
myDiv.querySelectorAll("#myDiv > .foo");
也就是说,我可以成功检索myDiv元素中具有类.foo的所有直接子元素.
问题是,我必须在选择器中包含#myDiv,因为我在myDiv元素上运行查询(所以它显然是多余的).
我应该能够关闭#myDiv,但是选择器不是合法语法,因为它以>开头.
有谁知道如何编写一个选择器,它只获取运行选择器的元素的直接子元素?
解决方法:
好问题.在被问到的时候,没有一种普遍实现的方法来进行“组合根源查询”(如John Resig called them).
现在引入了:scope伪类.在[Chrominum]版本的Edge或IE上不是supported,但已经有几年的Safari支持了.使用它,您的代码可能变为:
let myDiv = getElementById("myDiv");
myDiv.querySelectorAll(":scope > .foo");
请注意,在某些情况下,您还可以跳过.querySelectorAll并使用其他良好的老式DOM API功能.例如,代替myDiv.querySelectorAll(“:scope> *”),您可以编写myDiv.children.
否则,如果你还不能依赖:scope,我想不出另一种方法来处理你的情况而不添加更多的自定义过滤器逻辑(例如找到其.parentNode === myDiv的myDiv.getElementsByClassName(“foo”)),如果你试图支持一个真正想要将任意选择器字符串作为输入并将匹配列表作为输出的代码路径,那么显然不理想!但是,如果像我一样,你最终会问这个问题只是因为你一直在思考“你所拥有的只是一把锤子”,不要忘记DOM也提供了各种其他工具.
标签:javascript,css-selectors,dom 来源: https://codeday.me/bug/20190916/1808612.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。