Javascript 是否可以从for条件中省略“el&&”?

Javascript 是否可以从for条件中省略“el&&”?,javascript,for-loop,dom,parent,Javascript,For Loop,Dom,Parent,是否存在需要el&&的实际情况,或者我可以只留下el!==文档部分 我想不出什么,除非我没有传递一个元素或者我传递了一个无效的元素。如果有东西用一个不在DOM中的有效元素调用父对象,您需要这个条件来防止错误 考虑: function parents(element, selector) { for (let el = element; el && el !== document; el = el.parentNode) { if (el.matches(selecto

是否存在需要el&&的实际情况,或者我可以只留下el!==文档部分

我想不出什么,除非我没有传递一个元素或者我传递了一个无效的元素。

如果有东西用一个不在DOM中的有效元素调用父对象,您需要这个条件来防止错误

考虑:

function parents(element, selector) {
  for (let el = element; el && el !== document; el = el.parentNode) {
    if (el.matches(selector)) {
      return el;
    }
  }
  return null;
}
parents(anyChild, '#inexistent');

旁注:你所拥有的是有效的方法。如果你必须支持过时的浏览器,你可以考虑只使用它来填充一个好的填充物。要想知道为什么,请看这篇文章的最后一部分。。。。el怎么了?@Mike'Pomax'Kamermans-我认为OP的逻辑是html元素documentElement的parentNode是document。对,这就是为什么我们同意你不能摆脱el&&@Mike'Pomax'Kamermans-我认为我们的做法不同,但是的,我们同意。如果我是个人项目中唯一使用该功能的人,我应该担心吗?@user557108-这取决于你。几年前,浏览器与文档元素上方发生的事情有点不一致。在我所从事的任何项目中,我都会有一个守卫,在document.documentElement而不是document处驻足。或者更好的是,如果必要的话,我会和一个好的聚填充物一起使用-
const div = document.createElement("div");
div.innerHTML = "<span><span class='foo'></span></span>";
const span = div.querySelector(".foo");
// ...
const blah = parents(span, ".blah");
const div = document.getElementById(".something");
div.remove(); // Or on older browsers: div.parentNode.removeChild(div);
const blah = parents(div, ".blah");