我可以这样做:
<div id="myDiv">
<div class="foo"></div>
</div>
myDiv = getElementById("myDiv");
myDiv.querySelectorAll("#myDiv > .foo");
也就是说,我可以成功地检索myDiv元素的所有具有类.foo的直接子元素。
问题是,它困扰我,我必须包括在选择器中的#myDiv,因为我是在myDiv元素上运行查询(所以它显然是多余的)。
我应该能够离开#myDiv关闭,但选择器是不合法的语法,因为它以>开始。
有人知道如何编写一个选择器,它只获取选择器所运行的元素的直接子元素吗?
我创建了一个函数来处理这种情况,我想我会分享它。
getDirectDecendent(elem, selector, all){
const tempID = randomString(10) //use your randomString function here.
elem.dataset.tempid = tempID;
let returnObj;
if(all)
returnObj = elem.parentElement.querySelectorAll(`[data-tempid="${tempID}"] > ${selector}`);
else
returnObj = elem.parentElement.querySelector(`[data-tempid="${tempID}"] > ${selector}`);
elem.dataset.tempid = '';
return returnObj;
}
本质上,你所做的是生成一个随机字符串(randomString函数在这里是一个导入的npm模块,但你可以自己做),然后使用这个随机字符串来确保你在选择器中得到你期望的元素。然后你就可以自由使用>了。
我没有使用id属性的原因是id属性可能已经被使用了,我不想重写它。