@mdui/jq
Version:
拥有和 jQuery 相似 API 的轻量级 JavaScript 工具库
43 lines (42 loc) • 1.37 kB
JavaScript
import { $ } from '../../$.js';
import { unique } from '../../functions/unique.js';
import { JQ } from '../../shared/core.js';
import { isElement } from '../../shared/helper.js';
import '../each.js';
import '../is.js';
export const dir = ($elements, nameIndex, node,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
selector, filter) => {
const ret = [];
let target;
$elements.each((_, element) => {
target = element[node];
// 不能包含最顶层的 document 元素
while (target && isElement(target)) {
// prevUntil, nextUntil, parentsUntil
if (nameIndex === 2) {
if (selector && $(target).is(selector)) {
break;
}
if (!filter || $(target).is(filter)) {
ret.push(target);
}
}
// prev, next, parent
else if (nameIndex === 0) {
if (!selector || $(target).is(selector)) {
ret.push(target);
}
break;
}
// prevAll, nextAll, parents
else {
if (!selector || $(target).is(selector)) {
ret.push(target);
}
}
target = target[node];
}
});
return new JQ(unique(ret));
};