for条件可以省略"el &&"吗?
Can "el &&" be omitted from the for condition?
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 &&
的情况,或者我可以只留下 el !== document
部分?
我想不出任何一个,除非我不传递元素或传递无效元素。
如果调用 parents
时使用的有效元素不在 DOM 中,您需要该条件以防止出错。
考虑:
const div = document.createElement("div");
div.innerHTML = "<span><span class='foo'></span></span>";
const span = div.querySelector(".foo");
// ...
const blah = parents(span, ".blah");
parentNode
将达到 null
,而无需先成为 === document
。同样:
const div = document.getElementById(".something");
div.remove(); // Or on older browsers: div.parentNode.removeChild(div);
const blah = parents(div, ".blah");
旁注:您所拥有的实际上是 closest
方法。如果您必须支持过时的浏览器,您可能会考虑只使用它,并使用一个好的 polyfill。
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 &&
的情况,或者我可以只留下 el !== document
部分?
我想不出任何一个,除非我不传递元素或传递无效元素。
如果调用 parents
时使用的有效元素不在 DOM 中,您需要该条件以防止出错。
考虑:
const div = document.createElement("div");
div.innerHTML = "<span><span class='foo'></span></span>";
const span = div.querySelector(".foo");
// ...
const blah = parents(span, ".blah");
parentNode
将达到 null
,而无需先成为 === document
。同样:
const div = document.getElementById(".something");
div.remove(); // Or on older browsers: div.parentNode.removeChild(div);
const blah = parents(div, ".blah");
旁注:您所拥有的实际上是 closest
方法。如果您必须支持过时的浏览器,您可能会考虑只使用它,并使用一个好的 polyfill。